我有两个问题:
在 PHP 中,当程序员使用“REMOTE_ADDR”变量来获取 Web 客户端的 IP 地址时,该 IP 地址是从 HTTP 标头中的字段中获取的吗?或者从哪里来?
如果客户端的 IP 地址是从 HTTP 标头中获取的,Web 客户端是否可以“欺骗”或“更改”HTTP 标头以隐藏其真实 IP 地址?
REMOTE_ADDR
取自 TCP/IP 连接,并且“非常难以”进行欺骗。
如果您的服务器位于反向代理后面,则它可能不准确。在这种情况下,您必须读取 X-Forwarded-For
标头,如果您的代理并不总是覆盖它,则该can 很容易被欺骗。
$_SERVER["REMOTE_ADDR"] : 正如所说,从 TCP 连接中的 IP 套接字获取 IP...欺骗真实 IP 的方法很容易使用远程服务器,例如:“TOR 网络”。
示例: 如果我想向站点服务器发送请求(但我需要欺骗我的 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;
?>
此代码演示了我如何使用使用 SOCKS5 / SOCKS4 的 TOR 服务来欺骗我的 IP 在不使用我的真实IP的情况下向另一台服务器发送请求。 我正在使用 Whatismyip.org 进行测试以查看 IP 变化。
玩得开心。
$_SERVER["REMOTE_ADDR"]
直接来自 TCP 连接。2)
$_SERVER["REMOTE_ADDR"]
只能在非 SSL TCP 连接上使用中间人攻击来进行欺骗(SSL 握手具有一些针对 IP 欺骗的保护措施)。2) 来自 HTTP 标头的
$_SERVER
变量以
HTTP_
为前缀,是的,如果它们包含 IP 地址,则调用者可以轻松地欺骗它们。您永远不应该信任包含 IP 地址的
$_SERVER["HTTP_*"]
变量。