我一直在向我的同事和这里宣讲在 SQL 查询中使用参数的好处,尤其是在 .NET 应用程序中。我什至承诺他们会提供对 SQL 注入攻击的免疫力。
但我开始怀疑这是否真的是真的。是否有任何已知的 SQL 注入攻击可以成功针对参数化查询?例如,您可以发送一个导致服务器缓冲区溢出的字符串吗?
当然,还有其他考虑因素可以确保 Web 应用程序是安全的(比如清理用户输入和所有这些东西),但现在我正在考虑 SQL 注入。我对针对 MsSQL 2005 和 2008 的攻击特别感兴趣,因为它们是我的主数据库,但所有数据库都很有趣。
编辑:澄清我所说的参数和参数化查询的意思。通过使用参数,我的意思是使用“变量”而不是在字符串中构建 sql 查询。
所以不要这样做:
SELECT * FROM Table WHERE Name = 'a name'
我们这样做:
SELECT * FROM Table WHERE Name = @Name
然后在查询/命令对象上设置@Name 参数的值。