web站点获取用户IP的安然办法 HTTP_X_FORWARDED_FOR查验

    添加时间:2013-5-31 点击量:

    经由过程上一篇,获取用户Ip地址通用办法常见安然隐患(HTTP_X_FORWARDED_FOR) ,我们已经意 识到直接从http_x_forwarded_for中读取用户IP,跟我们直接从一个get,post值中读取其实没有两样。web参数检测里面一个基起原根蒂根基则:“一切输入都是有害的”,是以,只如果输入我们就须要进行过滤。




    • 安然过滤后的getIP函数







      function getIP() {
    
    ¥realip = ; //设置默认值
    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];
    }

    preg_match(/^((?:\d{1,3}\.){3}\d{1,3})/,¥realip,¥match);
    return ¥match?¥match[0]:false;
    }



    以上函数,增长了IP断定,只会读取以Ip格局数据开首,并且第一个满足IP格局值。若是没有返回false。 如许就可以读取到满足格局的IP,验证了数据的IP格局。




    • 若是我读取互联网的IP,用户传入局域网的IP,我应当直接过滤掉




    我们在一些网站上方,经常可以看到提示,不法的IP地址,其实一项目组是IP地址格局错误,一项目组可能是读取到IP地址,不满足互联网上方容许IP格局。 以下这个函数,是经由过程IANA站点规范,封装了个函数。 经由过程输入IP地址,可以或许正确知道,该IP是不是可以在互联网应用。




    //互联网容许应用IP地址

    function ipType2(¥ip) {
    
    ¥iplist = explode(., ¥ip);

    if (¥iplist[0] >= 224 && ¥iplist[0] <= 239)
    return 多播;
    if (¥iplist[0] >= 240 && ¥iplist[0] <= 255)
    return 保存;

    if (preg_match(/^198\.51\.100/, ¥ip))
    return TEST-NET-2,文档和示例;
    if (preg_match(/^203\.0\.113/, ¥ip))
    return TEST-NET-3,文档和示例;

    if (preg_match(/^192\.(18|19)\./, ¥ip))
    return 收集基准测试;

    if (preg_match(/^192\.168/, ¥ip))
    return 专用收集[内部网];

    if (preg_match(/^192\.88\.99/, ¥ip))
    return ipv6to4中继;
    if (preg_match(/^192\.0\.2\./, ¥ip))
    return TEST-NET-1,文档和示例;
    if (preg_match(/^192\.0\.0\./, ¥ip))
    return 保存(IANA);
    if (preg_match(/^192\.0\.0\./, ¥ip))
    return 保存(IANA);

    if (¥iplist[0] == 172 && ¥iplist[1] <= 31 && ¥iplist[1] >= 16)
    return 专用收集[内部网];

    if (¥iplist[0] == 169 && ¥iplist[1] == 254)
    return 链路本地;
    if (¥iplist[0] == 127)
    return 环回地址;
    if (¥iplist[0] == 10)
    return 专用收集[内部网];
    if (¥iplist[0] == 0)
    return 本收集(仅作为源地址时合法);

    return InterNet网地址;
    }


    当你输入IP地址,它返回是“’InterNet网地址’ ,那么这个IP地址不但格局正确,并且是互联网上方合法的IP地址。 这个函数很错杂,其实就是打消很多非互联网应用IP地址。 我们常见的192,127,10开首地址估计都很熟悉了。 但实际上,很多IP地址是保存的,或者留作它用。 不克不及作为互联网 IP应用。 有了以上两个函数,我们不但可以读到正确格局IP地址,还可以或许包管读到是互联网上方IP地址。 以上是工作中常应用的函数,迎接伴侣们交换!



    作者:chengmo  QQ:8292669 
    原文网址:http://blog.chacuo.net/103.html 
    订阅对峙存眷:http://blog.chacuo.net/feed 
    本文版权归作者所有,迎接转载,请务必添加原文链接。



    彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
    分享到: