我想知道除了使用参数化查询和验证数据之外,是否还有其他针对 SQL 注入的措施。谢谢!
3 回答
显然,除了您可能在客户端上做的任何事情之外,还要确保您在服务器端验证数据。
此外,如果您正在谈论网络,请确保您正在验证所有数据,即 QueryString 和 Cookie 值以及表单字段。
我知道这是谷歌上的第一个热门,但我确实不时阅读这篇文章并对其进行真正的评价(再次与网络有关): http ://www.securiteam.com/securityreviews/5DP0N1P76E.html
我总是通过自定义消毒服务器端运行我的用户输入文本,所以我可以删除所有讨厌的东西,以防它通过。(& " = ' 等)
除了我调用的存储过程之外,我的代码中没有任何 SQL 语句,因此即使他们确实发现了漏洞,他们也必须在接触表之前找出我的存储过程。
在存储过程参数中,您可以限制文本大小,例如 VARCHAR(10) 因此,如果您通常期望字符串“123456”和“12345' AND UNION SELECT * FROM MEMBERS INNER JOIN MEMBER_ADDRESS ON ID”通过,则存储的程序不会喜欢它。
最后一点,尝试捕获所有返回的异常,并尝试优雅地处理它们。有时您会看到网站显示类似“无法连接到数据库,'USER_ID' 在 mydatabase.member 中不存在”之类的信息。让某人嗅探一下您的数据库体系结构将开始进行漏洞利用。
有了上面所有好的答案,我所做的是创建一个脚本来扫描所有表并为表名和列创建白名单,然后我用它来验证任何应该是表/列名的用户输入,因为它们没有进入参数查询。其他任何东西都通过 PDO Bind 参数化!