今天我用acunetix检查了我的脚本,并在我的一个文件中找到了“盲注SQL”。
Accunetix消息:
攻击详情
HTTP标头输入x-forwarded-for设置为1'并且sleep(2)='
如何修复此漏洞:
您的脚本应该从用户输入中过滤元字符。 有关修复此漏洞的详细信息,请查看详细信息。
我已使用mysql_real_escape_string()func转义了所有输入,但错误已存在。
我尝试使用以下代码在我的文件中过滤此标题:
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
mysql_real_escape_string(addslashes(($_SERVER['HTTP_X_FORWARDED_FOR'])));
但是不起作用。请帮忙!
答案 0 :(得分:6)
最好使用PDO预处理语句来防止SQL注入,而不是尝试创建自己的“脚本”,只是转义字符不足以阻止SQL注入
请查看PDO准备好的声明:http://php.net/manual/en/pdo.prepared-statements.php
答案 1 :(得分:1)
您的应用程序很可能会使用某种有缺陷的功能来确定访问者的IP地址。“
撇开使用HTTP_X_FORWARDED_FOR
用于此目的错误的事实,很可能它解释了为什么你的尴尬逃脱不起作用。
似乎系统在中使用某个变量中的IP地址之前将其转义。然后这个变量进入查询,而你正在逃避无害的XFF。
这里有真正的解释,为什么你应该使用准备好的语句:因为它们格式化了正确的值,就在它应该的位置。使它无法使用太早逃跑了。