获取用户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,我们起首要弄清楚,这些数据是从那个处所传过来的。




    • 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例子加以申明,正常景象下,这个值变更过程。






    • 解析Bug风险点:




    经由过程方才解析我们发明,其实这些变量,来自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 
    本文版权归作者所有,迎接转载,请务必添加原文链接。



    真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
    分享到: