HP FORTIFY 360 a

时间:2012-01-13 05:27:16

标签: .net controls fortify

扫描Asp.Net项目时出现错误说访问控制数据库,

它说

  

“如果没有适当的访问控制,执行包含用户控制的主键的SQL语句可能允许攻击者查看未经授权的记录。”

即使对输入字段进行了适当的验证,数据也会在各层之间移动,即,前端(UI) - >业务层 - >数据层。

是否要设置控件或数据库中的任何属性以便可以解决问题

2 个答案:

答案 0 :(得分:5)

“访问控制:数据库”表示从攻击者接收到NUMERIC输入数据,并提供给查询。它可以验证格式,例如“确保它是一个正整数”,但风险在于,如果攻击者控制了值,他可以更改查询的主键,从而获得不同的数据。

这与SQL注入的不同之处仅在于SQL注入按照约定意味着攻击者改变了查询的结构(例如通过添加关键字)。但当然,他们都将内容注入SQL。

“控件或数据库中是否有属性......?”否。

  1. 要正确验证此数据,您必须放置应用程序级别控件,以确保攻击者仅提供允许添加的主键。例如,您可以通过不向远程客户端提供任何值来执行此操作。您可以在请求中将其保留在会话中。

  2. 要正确解决完全合法的问题: 在审计分析或主要标记下拉列表中选择“不是问题”。 输入注释,向安全主管解释为什么您认为逻辑是合理且安全的。 使用不必要的愚蠢提交按钮提交评论。

  3. 要正确解决整个类别的合法问题: 我通常创建一个过滤器来隐藏访问控制:数据库问题,其中不受信任的数据源不是远程攻击者而是数据库。

  4. 在这种情况下,查询1查找“Jane Doe”并获取她的foo ID。查询2在ID = Jane的foo ID的另一个地方查找。该ID源自第一个数据库查询。该数据将带有名为“DATABASE”的Fortify Taint Flag。您和您的安全审计员可能会相信这些信息来源。或者,它可能被认为是黑客隐藏恶意数据的另一个地方,旨在实现对您的应用的颠覆。我不知道。

    如果您和您的安全审核员信任该数据库,您可以创建一个过滤器“if taint:database - >隐藏问题”,然后将此过滤器放入项目模板的默认过滤器中。您可以使用Audit Workbench的Tools-> Project Configuration ...对话框执行此操作。

答案 1 :(得分:0)

只要它直接来自用户强化警告你。通常它是假阳性。 Fortify期望,用户输入必须从另一个源(如数组)进行验证。

修复它的另一种可能性是,创建一个自定义dll,其中包含用户输入的验证功能。不要将用户参数直接传递给数据库层。使用自定义dll验证这些输入。这将%100工作。