Asp.net(C#) Fortify扫描报Trust Boundary Violation错误如何解决?
Fortify扫描Trust Boundary Violation(信任边界违规)问题解决方案
报错含义说明
Fortify给出的报错翻译为:
xyz.aspx.cs中的set_xxx()方法将可信数据与不可信数据混合在同一数据结构中,这可能导致开发人员错误地信任未校验的数据。
触发原因
- Fortify的安全规则中,ASP.NET的Session属于服务端可信存储区域,默认认为存入Session的数据都是经过合法性校验的可信数据
- 你提供的属性set方法未对传入的
value做任何校验就直接写入Session,扫描器判定存在将未验证的外部不可信输入直接存入可信区的风险,因此触发信任边界违规的告警。即使业务运行正常,也不符合静态安全扫描的规则要求。
修复方案
方案1:在set方法中补充业务校验逻辑
根据该属性存储的内容的业务规则,增加对应的合法性校验,只有符合规则的数值才允许写入Session,示例代码如下:
private string xxx { get { // 优化写法,等价于原有逻辑 return Session["_xyz"] as string; } set { // 此处校验规则需替换为你实际业务的校验逻辑,比如用户名、邮箱、手机号等对应的正则或判断条件 if (!string.IsNullOrWhiteSpace(value) && value.Length <= 20 && !value.Contains('<')) { Session["_xyz"] = value; } else { // 可根据业务需要选择抛出异常、赋值默认值或打告警日志 throw new ArgumentException("xxx属性传入值不符合业务规则要求"); } } }
该方案可以从根本上解决风险,是优先推荐的修复方式。
方案2:确认无风险后添加扫描抑制注解
如果可以100%确认所有调用该属性set方法的上游逻辑,都已经提前完成了全量的合法性校验,传入的value不存在不可信输入的可能,可以添加Fortify认可的抑制注解,明确说明理由来消除误报告警:
private string xxx { get { return Session["_xyz"] as string; } // 注解中的规则ID可根据你实际使用的Fortify版本对应的规则ID调整 [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "Trust Boundary Violation", Justification = "所有调用该set方法的上游逻辑均已完成参数合法性校验,传入值均为受控可信数据,不存在安全风险")] set { Session["_xyz"] = value; } }
注意:禁止在未确认风险的情况下随意添加抑制注解,避免遗漏真实的安全问题
内容的提问来源于stack exchange,提问作者zia
相关产品推荐
相关产品推荐

