程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 使用CURL偽造來源網址與IP

使用CURL偽造來源網址與IP

編輯:關於PHP編程

很多投票都有對來路的網址和IP進行驗證,但是使用CURL可以偽造成任意的網址與IP,以繞過一些簡單的驗證,下面舉一個簡單的例子。

程序運行之前,請確保 php.ini 中 extension=php_curl.dll 沒有被注釋掉。

test.php

<?php
	$ch = curl_init();  
	curl_setopt($ch, CURLOPT_URL, "http://localhost/test_2.php");  
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));  //構造IP  
	curl_setopt($ch, CURLOPT_REFERER, "http://www.bkjia.com/ ");   //構造來路  
	curl_setopt($ch, CURLOPT_HEADER, 1);  
	$out = curl_exec($ch);  
	curl_close($ch); 
?>

test.php 會向 test_2.php 發送請求。

<?php
	function getClientIp() {  
		if (!empty($_SERVER["HTTP_CLIENT_IP"]))  
			$ip = $_SERVER["HTTP_CLIENT_IP"];  
		else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))  
			$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];  
		else if (!empty($_SERVER["REMOTE_ADDR"]))  
			$ip = $_SERVER["REMOTE_ADDR"];  
		else  
			$ip = "err";  
		return $ip;  
	}
	  
	echo "<br />IP: " . getClientIp() . "";  
	echo "<br />referer: " . $_SERVER["HTTP_REFERER"]; 
?>

程序運行結果如下:

HTTP/1.1 200 OK Date: Tue, 01 Nov 2011 12:20:06 GMT 
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 
OpenSSL/0.9.8i PHP/5.2.9 X-Powered-By: PHP/5.2.9 
Content-Length: 53 Content-Type: text/html 
IP: 8.8.8.8
referer: http://www.bkjia.com/

看到了吧,IP和地址可以隨意換,對於很多投票機制不完善的投票功能都可以使用這個進行刷票了。

順便說一下,關於真實IP的事情。

一般獲得用戶IP都是使用$_SERVER['REMOTE_ADDR']這個環境變量,但是此變量只會紀錄最後一個主機IP,所以當用戶浏覽器有設定Proxy時,就無法取得他的真實IP。

這時可以使用另一個環境變量$_SERVER['HTTP_X_FORWARDED_FOR'] ,它會紀錄所經過的主機IP,但是只有在用戶有透過Proxy時才會產生,所以可以像以下這樣寫來取得使用者真實IP。

<?php  
if ( empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) 
{  
	$myip = $_SERVER['REMOTE_ADDR'];  
} 
else  
{  
    $myip = explode( ',' , $_SERVER['HTTP_X_FORWARDED_FOR']);  
    $myip = $myip [0];  
}  
echo $myip;  
?>  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved