Home >php教程 >php手册 >使用CURL伪造来源网址与IP

使用CURL伪造来源网址与IP

WBOY
WBOYOriginal
2016-06-13 09:38:411469browse

很多投票都有对来路的网址和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;  
?>  
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn