Fuzqing

PHP 零零碎碎的笔记【长期更新】
获取客户端的真实IP:PHP里用来获取客户端IP的变量:$_SERVER['HTTP_CLIENT_IP']这个头...
扫描右侧二维码阅读全文
22
2018/07

PHP 零零碎碎的笔记【长期更新】

获取客户端的真实IP:

PHP里用来获取客户端IP的变量:

  1. $_SERVER['HTTP_CLIENT_IP']这个头是有的,但是很少,不一定服务器都实现了。客户端可以伪造。
  2. $_SERVER['HTTP_X_FORWARDED_FOR'] 是有标准定义,用来识别经过HTTP代理后的客户端IP地址,格式:clientip,proxy1,proxy2。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-For。 客户端可以伪造。
  3. $_SERVER['REMOTE_ADDR'] 是可靠的, 它是最后一个跟你的服务器握手的IP,可能是用户的代理服务器,也可能是自己的反向代理。客户端不能伪造。

客户端可以伪造的参数必须过滤和验证!很多人以为$_SERVER变量里的东西都是可信的,其实并不不然,$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR']都来自客户端请求的header里面。

所以我们可以可以用$_SERVER['REMOTE_ADDR'],或者使用getenv("REMOTE_ADDR")来获取客户端的真实IP,所谓的真实IP是指最后一个和我们服务器通信的IP

//判断服务器是否允许$_SERVER,不允许就使用getenv获取
$real_ip = isset($_SERVER) ? $_SERVER['REMOTE_ADDR'] : getenv("REMOTE_ADDR");
Last modification:July 25th, 2018 at 03:21 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment