加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现的限制IP投票程序IP来源分析

发布时间:2022-02-24 14:30:16 所属栏目:PHP教程 来源:互联网
导读:本文实例分析了PHP实现的限制IP投票程序。分享给大家供大家参考,具体如下: 接到一个投票活动的需求,需要做IP限制,每个IP限制一定的投票机会。我在搜索引擎上搜索了关键词:PHP客户端IP ,结果基本上都是以下内容: if(getenv(HTTP_CLIENT_IP) strcasec
  本文实例分析了PHP实现的限制IP投票程序。分享给大家供大家参考,具体如下:
 
  接到一个投票活动的需求,需要做IP限制,每个IP限制一定的投票机会。我在搜索引擎上搜索了关键词:PHP客户端IP ,结果基本上都是以下内容:
 
  if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
  
     $onlineip = getenv('HTTP_CLIENT_IP');
  
  } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
  //Cuoxin.com
     $onlineip = getenv('HTTP_X_FORWARDED_FOR');
  
  } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
  
     $onlineip = getenv('REMOTE_ADDR');
  
  } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
  
     $onlineip = $_SERVER['REMOTE_ADDR'];
  
  }
  这段代码在使用广泛的 《discuz》论坛软件,以及众多开放源代码的PHP软件里都会有使用到,大致思路是获取最终的客户端IP地址(能获得使用代理访问的用户的IP地址)。
 
  由于很多成熟的程序都使用了这段代码获取客户端IP地址,所以我也就放心的运用在了程序里,好在后来有同事提醒,发现这段代码不能用在限制IP的投票程序里,因为 HTTP_X_FORWARDED_FOR这个是可以伪造的,只要在请求头里增加 X-Forwarded-For 。在服务器端的 $_SERVER[‘HTTP_X_FORWARDED_FOR'] 接收到的就是这个请求头的内容。
 
  下面我用程序说明一下:
 
  http://localhost/i.php 内容是通过上面的代码获取IP地址,并打印出来。
 
  编写构造请求的代吗,请求这个URL:其中在请求头里增加了X-Forwarded-For这个参数:
 
  $head = array();
  
  $head[] = 'GET /i.php HTTP/1.1';
  
  $head[] = 'Host: localhost';
  
  $head[] = 'X-Forwarded-For: 255.255.255.255' ;
  
  $head[] = 'Connection: Close' ;
  
  $head = join("rn",$head) ;
  
  $head .= "rnrn";
  
  $fp = fsockopen('localhost', 80);
  
  fwrite($fp, $head);
  //Cuoxin.com
  $response = array() ;
  
  while($buff = fread($fp, 4096)){
  
     $response[] = $buff;
  
  }
  
  print join('',$response) ;
  执行这段代码,可以得知,服务器端(localhost/i.php) 打印了 255.255.255.255 。
 
  说明了这种获取客户端IP的方法在限制IP的投票活动里是不可取的,客户端的IP地址可用伪造。而直接使用 $_SERVER['REMOTE_ADDR'] 虽然获取到的不是用户的最终IP地址,但是限制的功能是直接有效的达到了。
 
  当然,也不能说那段代码是错误的。在一些对IP不做限制的需求里,应该使用,比如,在一些有很多地域性子网站的网站,通过用户访问的IP,直接跳转到该用户所在区域的子网站等。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读