【发布时间】:2010-09-23 07:53:35
【问题描述】:
我一直在向我的同事和这里宣扬在 SQL 查询中使用参数的好处,尤其是在 .NET 应用程序中。我什至承诺他们会提供对 SQL 注入攻击的免疫力。
但我开始怀疑这是否真的是真的。是否有任何已知的 SQL 注入攻击可以成功针对参数化查询?例如,您可以发送一个导致服务器缓冲区溢出的字符串吗?
当然,要确保 Web 应用程序是安全的(例如清理用户输入和所有这些东西),还需要考虑其他因素,但现在我正在考虑 SQL 注入。我对针对 MsSQL 2005 和 2008 的攻击特别感兴趣,因为它们是我的主数据库,但所有数据库都很有趣。
编辑:澄清我所说的参数和参数化查询的意思。通过使用参数,我的意思是使用“变量”而不是在字符串中构建 sql 查询。
所以不要这样做:
SELECT * FROM Table WHERE Name = 'a name'
我们这样做:
SELECT * FROM Table WHERE Name = @Name
然后在查询/命令对象上设置@Name参数的值。
【问题讨论】:
-
我们应该澄清参数的含义(正如 Jonathan Leffler 指出的那样) - 我在想存储过程参数,但也有?参数和 {0} 参数...
-
说起来容易多了,我们不使用串联来构建查询。
-
由于标签是 asp.net,我假设您正在构建 Web 应用程序。在这种情况下,您还应该注意 XSS 攻击,也许还有其他攻击
标签: asp.net sql database sql-injection