国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP實現的限制IP投票程序IP來源分析

2024-05-04 21:50:50
字體:
來源:轉載
供稿:網友

本文實例分析了PHP實現的限制IP投票程序。分享給大家供大家參考,具體如下:

接到一個投票活動的需求,需要做IP限制,每個IP限制一定的投票機會。我在搜索引擎上搜索了關鍵詞:PHP客戶端IP ,結果基本上都是以下內容:

  1. if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
  2.  
  3.    $onlineip = getenv('HTTP_CLIENT_IP'); 
  4.  
  5. elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { 
  6. //Vevb.com 
  7.    $onlineip = getenv('HTTP_X_FORWARDED_FOR'); 
  8.  
  9. elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { 
  10.  
  11.    $onlineip = getenv('REMOTE_ADDR'); 
  12.  
  13. elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { 
  14.  
  15.    $onlineip = $_SERVER['REMOTE_ADDR']; 
  16.  

這段代碼在使用廣泛的 《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這個參數:

  1. $head = array(); 
  2.  
  3. $head[] = 'GET /i.php HTTP/1.1'
  4.  
  5. $head[] = 'Host: localhost'
  6.  
  7. $head[] = 'X-Forwarded-For: 255.255.255.255' ; 
  8.  
  9. $head[] = 'Connection: Close' ; 
  10.  
  11. $head = join("rn",$head) ; 
  12.  
  13. $head .= "rnrn"
  14.  
  15. $fp = fsockopen('localhost', 80); 
  16.  
  17. fwrite($fp$head); 
  18. //Vevb.com 
  19. $response = array() ; 
  20.  
  21. while($buff = fread($fp, 4096)){ 
  22.  
  23.    $response[] = $buff
  24.  
  25.  
  26. print join('',$response) ; 

執行這段代碼,可以得知,服務器端(localhost/i.php) 打印了 255.255.255.255 。

說明了這種獲取客戶端IP的方法在限制IP的投票活動里是不可取的,客戶端的IP地址可用偽造。而直接使用 $_SERVER['REMOTE_ADDR'] 雖然獲取到的不是用戶的最終IP地址,但是限制的功能是直接有效的達到了。

當然,也不能說那段代碼是錯誤的。在一些對IP不做限制的需求里,應該使用,比如,在一些有很多地域性子網站的網站,通過用戶訪問的IP,直接跳轉到該用戶所在區域的子網站等。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁城县| 文山县| 郑州市| 永清县| 茶陵县| 宁陕县| 略阳县| 贵州省| 青田县| 屏边| 泗阳县| 凉山| 社会| 江山市| 余姚市| 衡水市| 仲巴县| 黄梅县| 邢台市| 台湾省| 浑源县| 盐源县| 南雄市| 通山县| 平乐县| 梁河县| 甘泉县| 普宁市| 崇仁县| 都昌县| 西宁市| 济宁市| 易门县| 扶风县| 衡水市| 晋宁县| 小金县| 大荔县| 阳山县| 寻乌县| 安远县|