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