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调用数据库的存贮过程
Oct 09 PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
用缓存实现静态页面的测试
Dec 06 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php图片裁剪函数
Oct 31 PHP
PHP基于swoole多进程操作示例
Aug 12 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
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
浅谈PHP进程管理
2019/03/08 PHP
javascript 继承实现方法
2009/08/26 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
wxPython事件驱动实例详解
2014/09/28 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
创建卫生先进单位实施方案
2014/03/10 职场文书
2014年学校工作总结
2014/11/20 职场文书
2014年稽查工作总结
2014/12/20 职场文书
英文导游词
2015/02/13 职场文书
2015年端午节活动方案
2015/05/05 职场文书
科技馆观后感
2015/06/08 职场文书
通讯稿范文
2015/07/22 职场文书
八年级语文教学反思
2016/03/03 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android