可以将$ _SERVER ['REMOTE_ADDR']伪造成任意字符串吗?

时间:2013-07-14 14:15:50

标签: php security mysqli ip code-injection

我多次读过使用$ _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

当你知道它可以被修改时很容易消毒,但我想知道这有什么可能吗?

1 个答案:

答案 0 :(得分:0)

不,假装是不可能的。

您的代码有两个错误。

  1. 如果变量是“安全的”,您可以通过思考清理事物。虽然您应该格式化您的SQL文字,但要在预备语句上留下思考负担。
  2. 你有一些妥协的获取$ ip的方式。 $ip$_SERVER['REMOTE_ADDR']填写不安全的方式。你可以在这里找到很多答案来帮助你。