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];
}
¥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
本文版权归作者所有,迎接转载,请务必添加原文链接。
彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
经由过程上一篇,获取用户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];
}
¥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
本文版权归作者所有,迎接转载,请务必添加原文链接。