【发布时间】:2017-05-23 20:13:48
【问题描述】:
我如何满足静态代码分析工具(在本例中为 checkmarx)以下方法没有问题:
public OdbcDataReader ExecuteQuery(string sql)
{
var cmd = new OdbcCommand(sql, connection);
return cmd.ExecuteReader();
}
Checkmarx 告诉我以下内容:
方法 ExecuteQuery 从 ExecuteReader 元素获取数据库数据。 然后这个元素的值流经代码 未经适当消毒或验证,并最终 在 ExecuteQuery 方法中的数据库查询中使用。 这可能会导致二阶 SQL 注入攻击。
【问题讨论】:
-
在“sql”到达您的 ExecuteQuery 方法之前,是否对它进行了任何类型的输入清理?我推断分析工具看到'sql'进入,然后在 ExecuteReader 触发之前被传递到 OdbcCommand 对象的构造函数中...
-
SQL 在 Web 服务器端是硬编码的。它使用 String.Format 代替参数
-
好吧,不幸的是,就 SQL 注入(直接字符串而不是参数化查询)而言,这或多或少是不做的事情 101。除非我误解了情况,否则你能不能在这个方法中至少做一些卫生检查?
-
@Robben_Ford_Fan_boy -- 该工具告诉您不要使用 String.Format -- 更改为参数化查询,消息就会消失。你们可以将输入清理为字符串格式——这要困难得多
标签: c# security sql-injection checkmarx