如果我有一个SQL Server数据库的SQL应用程序,是否可以安全地假设如果要进行ASP.NET注入攻击,它将通过SqlCommand类的一个实例?
背景:
我所处的情况是,我继承了一个相当大的web应用程序,该应用程序存在一些SQL注入漏洞。我只是通过查看代码中的其他问题找到了几个漏洞,但我想知道,查找所有SqlCommand注入漏洞的安全方法是不是在所有文件中搜索SQL实例,然后检查它们是否为参数化查询。这是一个可靠的计划吗?
发布于 2012-11-21 08:25:22
我不会只看 SqlCommand --代码可以使用DBCommand或IDbCommand。它可以被封装在像EF、L2S或NHibernate这样的ORM中(它们都提供了某种级别的原始访问)。它可以使用像"dapper“或simple.data这样的东西。或者DataTable / DataAdapter。您可能有使用旧版OLEDB或ADODB访问的代码。见鬼,就我们所知,你可以写你自己的低级TDS API。
所以:归根结底就是检查数据访问代码,这可能有很多种形式。如果你的部门方法是“直接使用SqlCommand”,那么事情就不一样了。
另外: SQL注入并不局限于.NET --例如,即使您进行了参数化,也可以在原始命令文本或存储过程TSQL中创建SQL注入风险,如果TSQL执行任何类型的连接以生成要通过EXEC调用的动态SQL。请注意,sp_executesql可以在这方面提供帮助。
发布于 2012-11-21 08:24:19
根据您的数据库模式,您可能还需要检查存储过程中的攻击(假设您使用的是存储过程)。我见过人们在他们的代码中使用参数化的存储过程,但在proc中,他们只使用EXEC来查询:
CREATE PROC Dummy
(
@Str VARCHAR(50)
)
AS
EXEC ('SELECT * FROM Table Where Column = ''' + @Str + '''')发布于 2012-11-21 08:19:10
您还需要查找使用或包含SqlCommand的内容。其中包括SqlDataAdapter等。
https://stackoverflow.com/questions/13484426
复制相似问题