【发布时间】:2012-01-20 08:25:35
【问题描述】:
虽然我当然可以看到使用参数进行 SQL 查询的优势,尤其是在处理日期时间和类似的事情时,但我仍然不确定参数是否是防止 SQL 注入的唯一方法。
事实是,我继承了一个应用程序,它有类似的东西
"SELECT Field FROM Table WHERE Filter='"+userinput.Replace("'", "''")+"'"
到处都是。现在,虽然这些在我看来不是很愉快,而且我不介意重写它们,但我的问题是,我 需要 吗?尽我所能,我看不到用这个执行 SQL 注入的方法。
【问题讨论】:
-
如果业界公认的最佳实践是使用参数化查询,具体来说,您不使用它们的原因是什么?
-
这段代码是别人写的,就像我说的。我要为其添加一些功能。如果我还要在几十个地方更改程序的其余部分,在确定它的行为与现在相同之前,我需要进行大量测试。因此,如果没有像现在这样的危险,我不确定这是否值得。
-
您必须权衡测试与有人窃取/破坏您的数据。
-
并非所有 SQL 语句都是可参数化的,例如
set role "a@b.com"或listen channel1,其中“a@b.com”或“channel”是您可能希望让用户设置的内容
标签: sql-server tsql