关于伪造X-Forwarded-For的目的我就不多说了。在***一个PHP站,GPC为ON的时候,
字符型注入全部歇菜,而在PHP5中,GPC默认是打开的。但是GPC对$_SERVER无任何影响,
因此可以通过伪造$_SERVER来达到注入的目的。
IP.php中有如下代码,主要是获取客户端IP:
<?
function GetIP() { 
if (getenv("HTTP_CLIENT_IP")){
echo "getenvHTTP_CLIENT_IP";
$ip = getenv("HTTP_CLIENT_IP");
}else if (getenv("HTTP_X_FORWARDED_FOR"))
   {
$ip = getenv("HTTP_X_FORWARDED_FOR");
   echo "getenvHTTP_X_FORWARDED_FOR";
   echo "<br>you are right";
}else if (getenv("REMOTE_ADDR")){
echo "getenvREMOTE_ADDR";
$ip = getenv("REMOTE_ADDR");
}else{
echo "unknow";
$ip = "Unknown";
}
return $ip;
}
echo GetIp();
?>
1.直接访问IP.PHP时,返回getenvREMOTE_ADDR127.0.0.1
2.用NC提交:
GET /1.php HTTP/1.1
Accept: */*
Referer:  http://localhost/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)
Host: localhost
Connection: Keep-Alive
Cache-Control: no-cache
X-Forwarded-For: 127.0.0.2
Cookie: rtime=0; ltime=1269249140109; cnzz_eid=64110124-1269242429-; language=zh-cn; PHPSESSID=ae9b14609808b4ff4c5811ad1943c529
返回getenvHTTP_X_FORWARDED_FOR127.0.0.2。
伪造X-Forwarded-For成功。
要想提高程序的安全性,不是一个GPC可以解决的,必须提高程序的过滤机制,因为任何的参数提交都是有害的!