-
-
解析过程
-
IP获取起原
-
解析Bug风险点:
-
结论:
获取用户Ip地址通用办法常见安然隐患(HTTP_X_FORWARDED_FOR)
添加时间:2013-5-30 点击量:
这个来自一些项目中,获取用户Ip,进行用户操纵行动的记录,是常见并且经常应用的。 一般伴侣,都邑看到如下通用获取IP地址办法。
function getIP() {
if (isset(¥_SERVER[HTTP_X_FORWARDED_FOR])) {
¥realip = ¥_SERVER[HTTP_X_FORWARDED_FOR];
} elseif (isset(¥_SERVER[HTTP_CLIENT_IP])) {
¥realip = ¥_SERVER[HTTP_CLIENT_IP];
} else {
¥realip = ¥_SERVER[REMOTE_ADDR];
}
return ¥realip;
}
这个是网上常见获取,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和谈进行扩大。定义了实体头。
HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分别。 HTTP_CLIENT_IP 在高等匿名中,这个代表了办事器IP。既然是http和谈扩大一个实体头,并且这个值对于传入端是信赖的,信赖传入方遵守规矩格局输入的。以下以x_forword_for例子加以申明,正常景象下,这个值变更过程。
经由过程方才解析我们发明,其实这些变量,来自http恳求的:x-forword-for字段,以及client-ip字段。 正常办事器,当然会按rfc规范来传入这些值。然则,当一个用户直接机关该x-forword-for值,发送给用户用户,那将会怎么样呢?
图(1)
第2步,批改x-forword-fox值,我们看算作果
第三步,我们再批改下看看会怎么样?
哈哈,看到上方成果没,x-forwarded-for不但可以本身设置值,并且可以设置随便率性格局值。 如许一来,比如就直接有一个可以写入随便率性值的字段。并且办事器直接读取,或者写入数据库,或者做显示。它将带来危险性,跟一般对入输入没有做任何过滤检测,之间操纵数据源成果一样。 并且轻易带来隐蔽性。
上方getip函数,除了客户端可以随便率性捏造IP,并且可以传入随便率性格局IP。 如许成果会带来2大题目,其一,若是你设置某个页面,做IP限制。 对方可以轻易批改IP络续恳求该页面。 其二,这类数据你若是直接应用,将带来SQL注册,跨站进击等漏洞。至于其一,可以在营业上方做限制,好不采取IP限制。 对于其二,这类可以带来重大收集风险。我们必须加以改正。
须要对getip 进行批改,获得安然的getip函数。
这类题目,其实很轻易呈现,以前我就哄骗这个骗取了多量假装投票。有它的隐蔽性,其实只要我们搞清楚了,某些值来龙去脉的话。懂得了它的道理,修复该类bug将是很是轻易。
题外话,做技巧,有三步,先要会做,会解决;后要思虑为什么要这么做,原因道理是什么;最后是怎么样做,有没有其它办法。多问问本身,你发明间隔技巧真谛越来越近。你干事会越来越驾轻就熟的!
作者:chengmo QQ:8292669
原文网址:http://blog.chacuo.net/98.html
订阅对峙存眷:http://blog.chacuo.net/feed
本文版权归作者所有,迎接转载,请务必添加原文链接。
-