【发布时间】:2013-07-14 14:15:50
【问题描述】:
我多次阅读过,使用 $_SERVER['REMOTE_ADDR'] 从客户端获取 IP 是安全的,因为它不能由用户直接修改(只能通过使用代理等),但它总是返回一个 IP。 直到今天,我收到了一封来自我的网站的错误电子邮件,指出查询时发生了 mysql 错误,该错误会检查 IP 是否被禁止。
原始查询如下所示:
SELECT * FROM `bans` WHERE `ip`='{$ip}'
获取ip是使用
$ip = $_SERVER['REMOTE_ADDR']
我没有对 $ip 进行任何清理,因为我认为它不能被用户修改... 我收到一封电子邮件说此查询失败:
SELECT * FROM `bans` WHERE `ip`='1'"+order+by+1--+, 111.222.111.222'
(注意:我放的是111.222.111.222而不是攻击者的实际IP)
我的电子邮件脚本还使用 $_SERVER['REMOTE_ADDR'] 获取 IP,所以我也得到了那个“假”IP:
IP: 1'"+order+by+1--+, 111.222.111.222
当你知道它可以修改时,它很容易消毒,但我想知道这怎么可能?
【问题讨论】:
-
相关问题你查了吗?
-
你能在服务器访问日志中跟踪这个请求吗?那里的IP地址是什么?
-
可以,日志中IP正常 - 111.222.111.222 - - [14/Jul/2013:00:04:11 +0200] "POST /somefile.php HTTP/1.0" 200 561 "site.com/some_other_file.php" "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101
-
我检查了相关问题,很遗憾没有一个回答我的问题。
-
所以 - 它不是伪造的。 Q.E.D.
标签: php security mysqli ip code-injection