当我开始在我的程序中编写第一个 SQL 语句时,我对使用同事向我展示的一种非常简单的方法保护自己免受 SQL 注入感到很自在。它用两个单引号替换了所有单引号。
例如,有一个搜索字段,您可以在其中输入客户名称以在客户表中搜索。如果你要输入
彼得的理发店
SELECT 语句看起来像
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
如果现在攻击者会插入这个:
';DROP TABLE FOO; --
该声明将如下所示:
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
它不会删除任何表,而是在 customertable 中搜索 customername ';DROP TABLE FOO;-- 我想不会找到 ;-)
现在在用这种方法编写语句并保护自己免受 SQL 注入之后,我读到许多开发人员使用参数化语句,但我从未读过使用“我们的”方法的文章。所以肯定有一个很好的理由。
参数化语句将涵盖哪些场景但我们的方法没有?与我们的方法相比,参数化语句的优势是什么?
谢谢
菲利普