我有两个问题:
1)在PHP中,当程序员使用"REMOTE_ADDR“变量来获取web客户端的IP地址时,该IP地址是从HTTP头中的一个字段中获取的吗?还是从哪里来的?
2)如果客户端的IP地址取自HTTP报头,web客户端是否可以“欺骗”或“更改”HTTP报头以隐藏其真实IP地址?
非常感谢。
发布于 2013-01-30 06:56:11
REMOTE_ADDR是从TCP/IP连接中提取出来的,很难被欺骗。
但是,如果您的服务器位于反向代理之后,它可能是不准确的。在这种情况下,你必须读取X-Forwarded-For头,如果你的代理不总是覆盖它,它很容易被欺骗。
发布于 2013-03-30 01:02:18
$_SERVER"REMOTE_ADDR“:正在从TCP连接中的IP套接字获取IP ...欺骗你的真实IP的方法很容易使用远程服务器,例如:“TOR network”。
示例:如果我想向站点服务器发送请求(但我需要欺骗我的IP),我使用:
<?php
$ip = '127.0.0.1';
$port = '9051';
$auth = 'PASSWORD';
$command = 'signal NEWNYM';
$fp = fsockopen($ip,$port,$error_number,$err_string,10);
if(!$fp) { echo "ERROR: $error_number : $err_string";
return false;
} else {
fwrite($fp,"AUTHENTICATE \"".$auth."\"\n");
$received = fread($fp,512);
fwrite($fp,$command."\n");
$received = fread($fp,512);
}
fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://whatismyip.org"); //ipimg.php
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>这段代码演示了我如何使用TOR服务欺骗我的IP,该服务使用SOCKS5 / SOCKS4向另一台服务器发送请求,而不使用我的真实IP。我正在使用whatismyip.org对其进行测试,以查看IP的变化。
玩得开心。
发布于 2013-01-30 06:56:58
1) $_SERVER["REMOTE_ADDR"]直接来自TCP连接。
2)只有在非SSL连接上使用中间人攻击才能欺骗$_SERVER["REMOTE_ADDR"] (SSL握手对IP欺骗有一些保护)。
2)来自HTTP头的$_SERVER变量以HTTP_和yes为前缀,如果它们包含IP地址,则调用者可以很容易地欺骗它们。您永远不应该信任包含IP地址的$_SERVER["HTTP_*"]变量。
https://stackoverflow.com/questions/14593584
复制相似问题