2

2 つの質問があります。

1) PHP では、プログラマーが "REMOTE_ADDR" 変数を使用して Web クライアントの IP アドレスを取得する場合、その IP アドレスは HTTP ヘッダーのフィールドから取得されますか? それともどこから?

2) クライアントの IP アドレスが HTTP ヘッダーから取得される場合、Web クライアントは HTTP ヘッダーを「なりすまし」または「変更」して、実際の IP アドレスを隠すことができますか?

どうもありがとうございました。

4

3 に答える 3

5

REMOTE_ADDRTCP/IP 接続から取得され、スプーフィングが非常に困難です。

ただし、サーバーがリバース プロキシの背後にある場合は、不正確になる可能性があります。その場合X-Forwarded-For、ヘッダーを読み取る必要がありますが、プロキシが常にオーバーライドしないと、簡単にスプーフィングされる可能性があります。

于 2013-01-29T22:56:10.963 に答える
3

$_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;
?>

このコードは、実際の IP を使用せずに、SOCKS5 / SOCKS4 を使用して別のサーバーにリクエストを送信する TOR サービスを使用して、IP をスプーフィングする方法を示しています。IPの変更を確認するために、whatismyip.orgでテストしています。

楽しむ。

于 2013-03-29T17:02:18.390 に答える
0

1) $_SERVER["REMOTE_ADDR"]TCP 接続から直接送信されます。

2)$_SERVER["REMOTE_ADDR"]非 SSL TCP 接続で中間者攻撃を使用してのみスプーフィングできます (SSL ハンドシェイクには IP スプーフィングに対する保護がいくつかあります)。

2) $_SERVERHTTP ヘッダーに由来する変数にはHTTP_、yes というプレフィックスが付けられます。IP アドレスが含まれている場合、呼び出し元によって簡単にスプーフィングされる可能性があります。$_SERVER["HTTP_*"]IP アドレスを含む変数は絶対に信頼しないでください。

于 2013-01-29T22:56:57.707 に答える