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 相关文章推荐
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
PHP队列用法实例
Nov 05 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
PHP中关于php.ini参数优化详解
Feb 28 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版(4)
2006/10/09 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
常用的javascript设计模式
2017/01/11 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
python开发之函数定义实例分析
2015/11/12 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
什么是接口(Interface)?
2013/02/01 面试题
小学师德标兵先进事迹材料
2014/05/25 职场文书
社团个人总结范文
2015/03/05 职场文书
专家推荐信范文
2015/03/26 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
解除租赁合同协议书
2016/03/21 职场文书
创业计划书之废品回收
2019/09/26 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS