web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验


Posted in PHP onJune 01, 2013

安全过滤后的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

PHP 相关文章推荐
ASP知识讲座四
Oct 09 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
PHP ajax 分页类代码
Nov 13 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php实现的CSS更新类实例
Sep 22 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
php异常处理捕获错误整理
Sep 23 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 #PHP
php源代码安装常见错误与解决办法分享
May 28 #PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 #PHP
php 深入理解strtotime函数的使用详解
May 23 #PHP
如何使用PHP计算上一个月的今天
May 23 #PHP
解析php二分法查找数组是否包含某一元素
May 23 #PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 #PHP
You might like
浅谈php冒泡排序
2014/12/30 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
RequireJs的使用详解
2017/02/19 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
企业职业病防治方案
2014/05/29 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
创先争优个人总结
2015/03/04 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
初中思想品德教学反思
2016/02/24 职场文书
自考生自我评价
2019/06/21 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python