我有输入值,例如用户可以上传照片,输入用户名,密码等等
我想自己测试SQL注入,我想要一些方法来阻止它。
我正在使用MySQL我知道有些人会说使用PDO或MySqli BUT,此时我仍然使用Mysql作为数据库。
谢谢!
答案 0 :(得分:1)
在测试此类应用程序时,请在每个字段中输入这样的值:
<div style="background:red">It's Buggy</div>
如果未正确插入,则会出错。如果它被正确插入并呈现为未转义的HTML,您将立即知道。
这适用于可通过$_GET
或$_POST
传入的每个参数。
用mysql_query
写作在最好的时候是危险的,如果你不是非常小心,那就是彻头彻尾的鲁莽。 PDO适用于MySQL和doesn't take that long to learn if you follow a good tutorial。
你应该写这样的查询:
INSERT INTO users (name) VALUES (?)
?
是一个可以安全绑定的数据占位符。
更好的方法是使用Propel或Doctrine之类的东西来提供适当的数据库层。这使得您的代码在MySQL和其他数据库之间更具可读性和可移植性。
答案 1 :(得分:0)
google上有很多文档。请参阅:https://stackoverflow.com/a/60496/2226755
尝试在输入中添加'
或"
,如果您输入了错误,那么这是一个SQL注入。
答案 2 :(得分:0)
注射技术因使用案例而异。作为用户名/密码检查的示例,给定此SQL:
SELECT user_id
FROM users
WHERE name = "$_POST['name']"
AND password = "$_POST['pass']";
...在这种情况下,为" OR "" = "
ed密码字段传递一个简单的POST
会产生这样的结果:
SELECT user_id
FROM users
WHERE name = ""
AND password = ""
OR "" = "";
...和 BAM !有user_id
个结果,实际上不应该有。{/ p>
这只是一个孤立的案例。我建议使用PDO
作为您的数据库驱动程序为您进行注射检查!
答案 3 :(得分:-1)
你可以在SQl中注入像这样的代码
anything' OR 'x'='x
你可以轻松地防止这种情况,只需谷歌“sql注入示例”并亲自看看