获取用户Ip地址通用方法
2016-08-19 23:01
573 查看
这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的。 一般朋友,都会看到如下通用获取IP地址方法。
public static function getIp() { if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) { $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; } elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) { $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"]; } elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]) { $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; } elseif (getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } elseif (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif (getenv("REMOTE_ADDR")) { $ip = getenv("REMOTE_ADDR"); } else { $ip = "Unknown"; } if(strpos($ip, ',') !== false){ $ip = explode(',', $ip); $ip = reset($ip); } return $ip; }
-
IP获取来源
1.’REMOTE_ADDR’ 是远端IP,默认来自tcp 连接是,客户端的Ip。可以说,它最准确,确定是,只会得到直接连服务器客户端IP。如果对方通过代理服务器上网,就发现。获取到的是代理服务器IP了。
如:a->b(proxy)->c ,如果c 通过’REMOTE_ADDR’ ,只能获取到b的IP,获取不到a的IP了。
另外:该IP想篡改将很难实现,在传递知道生成php server值,都是直接生成的。
2.’HTTP_X_FORWARDED_FOR’,’HTTP_CLIENT_IP’ 为了能在大型网络中,获取到最原始用户IP,或者代理IP地址。对HTTp协议进行扩展。定义了实体头。
-
结论:
上面getip函数,除了客户端可以任意伪造IP,并且可以传入任意格式IP。 这样结果会带来2大问题,其一,如果你设置某个页面,做IP限制。 对方可以容易修改IP不断请求该页面。 其二,这类数据你如果直接使用,将带来SQL注册,跨站攻击等漏洞。至于其一,可以在业务上面做限制,最好不采用IP限制。 对于其二,这类可以带来巨大网络风险。我们必须加以纠正。
需要对getip 进行修改,得到安全的getip函数。
这类问题,其实很容易出现,以前我就利用这个骗取了大量伪装投票。有它的隐蔽性,其实只要我们搞清楚了,某些值来龙去脉的话。理解了它的原理,修复该类bug将是非常容易。
题外话,做技术,有三步,先要会做,会解决;后要思考为什么要这么做,原因原理是什么;最后是怎么样做,有没有其它方法。多问问自己,你发现距离技术真理越来越近。你做事会越来越得心应手的!
相关文章推荐
- 获取用户Ip地址通用方法常见安全隐患 x-forwarded-for
- 获取用户Ip地址通用方法
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
- HTTP_X_FORWARDED_FOR获取用户Ip地址通用方法常见安全隐患
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
- 获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
- Python使用django获取用户IP地址的方法
- Flask框架获取用户IP地址的方法
- python使用Flask框架获取用户IP地址的方法
- python django 获取用户IP地址的方法
- JSP自定义标签获取用户IP地址的方法
- 增强记忆的好方法,做笔记---获取用户ip地址及所在城市
- Python使用django获取用户IP地址的方法