如何测试我的PHP脚本sql注入并防止它

时间:2014-01-23 18:50:05

标签: php mysql sql-injection

我有输入值,例如用户可以上传照片,输入用户名,密码等等

我想自己测试SQL注入,我想要一些方法来阻止它。

我正在使用MySQL我知道有些人会说使用PDO或MySqli BUT,此时我仍然使用Mysql作为数据库。

谢谢!

4 个答案:

答案 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 (?)

?是一个可以安全绑定的数据占位符。

更好的方法是使用PropelDoctrine之类的东西来提供适当的数据库层。这使得您的代码在MySQL和其他数据库之间更具可读性和可移植性。

答案 1 :(得分:0)

google上有很多文档。请参阅:https://stackoverflow.com/a/60496/2226755

尝试在输入中添加'",如果您输入了错误,那么这是一个SQL注入。

Understanding SQL Injection

答案 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注入示例”并亲自看看