我知道当你不能使用setParameters()时,清理参数(例如删除引号)并不是针对SQL注入的完美解决方案。
但是通过检查它们(参数)是否包含后面有空格的字符串来清理参数是否安全?如下所示???
'DELETE','ALTER','DROP','SELECT','TABLE'
例如,email参数已传递给服务器,但它包含DROP关键字: String param =“john @ mail'DROP myTable”
SELECT * from Users where email = 'john@mail'DROP mytable'
所以,我的桌子掉了;
注意每个关键字后留下的空间。这样,如果db中的数据包含列出的关键字但没有空格,那么它将被允许使用,否则它应该是黑客试图破坏我的数据(ALTER TABLE mydb)。
请随意添加任何SQL引擎示例:SQL,Oracle,HANA,MySQL
由于
答案 0 :(得分:4)
不,这还不够。
请遵循laid out by OWASP预防SQL注入的行业标准。
您发布的查询的SQL注入的一个明显示例是,如果有人为用户提供了以下输入:
john@mail' OR '1' = '1
哪会产生查询:
SELECT * from Users where email = 'john@mail' OR '1' = '1'
他们还可以注入UNION
来开始从其他表中选择数据。可能还有更具破坏性的例子。
底线永远不会尝试“自己动手”SQL注入保护。比你更聪明的人和我试图解决这个问题,目前公认的使用参数化查询的标准只是我们目前可用的最佳解决方案。