“x-forwarded-for”标头中的PHP-Blind SQL注入

时间:2013-09-09 12:51:25

标签: php sql sql-injection

今天我用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'])));

但是不起作用。请帮忙!

2 个答案:

答案 0 :(得分:6)

最好使用PDO预处理语句来防止SQL注入,而不是尝试创建自己的“脚本”,只是转义字符不足以阻止SQL注入

请查看PDO准备好的声明:http://php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:1)

您的应用程序很可能会使用某种有缺陷的功能来确定访问者的IP地址。“

撇开使用HTTP_X_FORWARDED_FOR用于此目的错误的事实,很可能它解释了为什么你的尴尬逃脱不起作用。

似乎系统在中使用某个变量中的IP地址之前将其转义。然后这个变量进入查询,而你正在逃避无害的XFF。

这里有真正的解释,为什么你应该使用准备好的语句:因为它们格式化了正确的值,就在它应该的位置。使它无法使用太早逃跑了。