$ _SERVER ['REMOTE_ADDR']を信頼しても安全ですか?


89

信頼しても大丈夫$_SERVER['REMOTE_ADDR']ですか?リクエストのヘッダーなどを変更して置き換えることはできますか?

そのようなものを書くのは安全ですか?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}

3
既存の回答に加えて、サーバーにリクエストを送信したのは常にIPアドレスですが、それはリクエストを開始したコンピューターのIPアドレスであるという意味ではありません。あなたとエンドユーザーの間に任意の数のプロキシサーバーが存在する可能性があり、あなたに最も近いのは取得したIPアドレスです。
ダングロスマン2011年

はい、他のトリックや不正行為に置き換えることはできないため、安全です。ただし、$ grant_all_admin_rights変数のチェックをさらに追加してください。
Yuda Prawira

任意の$ _SERVER変数をスプーフィングできます-例:curl_setopt($ ch、CURLOPT_HTTPHEADER、array( "REMOTE_ADDR:$ ip"、 "HTTP_X_FORWARDED_FOR:$ ip")); したがって、それは完全にコンテキストに依存します。攻撃者が応答を期待している場合、それは$ ipに戻ります。彼らが応答を気にしない場合、彼らは確かにヘッダーを偽装することができます。ヘッダーチェック後のコードが代わりに次のように言った場合: "open_the_door_to_badguys();" あなたは問題を抱えているでしょう。
TMG 2013年

3
@TMGHTTP$_SERVER['REMOTE_ADDR']リクエストヘッダーを設定して変数をスプーフィングすることはできません。PHPHTTP_は、$_SERVERスーパーグローバルでキーを作成するときに、すべてのHTTPリクエストヘッダーの前に自動的にプレフィックスを付けます。
MrWhite 2015

回答:


110

はい、安全です。これはTCP接続の送信元IPであり、HTTPヘッダーを変更して置き換えることはできません。

心配したい場合の1つは、リバースプロキシの背後にいる場合です。この場合、REMOTE_ADDRは常にプロキシサーバーのIPになり、ユーザーIPはHTTPヘッダー(X-Forwarded-Forなど)で提供されます)。ただし、通常のユースケースでは、REMOTE_ADDRを読み取ることで問題ありません。


4
IPアドレススプーフィングはどうですか?
アブダル2015年

1
@Abdullそれができる人は通常、あなたの箱に物理的にアクセスできる人と同じです。そんなに心配しないでください。
behrooz 2015

5
@Abdull IPスプーフィングは、メッセージを一方向にしか送信できません。IPをスプーフィングして、メッセージを受け取ることはできません。

1
インターネットルーターは、送信元IPと宛先IPをチェックしてパケットをルーティングしていませんか?なりすましパケットがインターネットノードを介して宛先に到達することはないと思います。
Viktor Joras 2018年

57

$_SERVER['REMOTE_ADDR']TCP接続が接続されたIPアドレスです。インターネット上のIPアドレスを双方向にスプーフィングすることは技術的には可能ですが(BGPを介して不正なルートをアナウンスすることにより)、そのような攻撃は発見される可能性が高く、一般的な攻撃者は利用できません。基本的に、攻撃者はISPまたは通信事業者を制御する必要があります。TCPに対する実行可能な一方向のスプーフィング攻撃は(まだ)ありません。ただし、LANでは双方向IPスプーフィングは簡単です。

また、IPv4ではなくIPv6アドレスである可能性があることにも注意してください。その点では現在のチェックは問題ありませんが、内のどこかで1.2.3.4のみ発生することをチェックする場合、攻撃者はから接続する可能性があります。$_SERVER['REMOTE_ADDR']2001:1234:5678::1.2.3.4

要約すると、重大な(銀行/軍事/潜在的な損害> 50.000€)アプリケーション以外の場合、ローカルネットワークで攻撃者を除外できる場合は、リモートIPアドレスを使用できます。


4
あなたはインターネットプロトコルについて非常によく知っているように聞こえます。
ブライアンピーターソン

@ phihag、$_SERVER['REMOTE_ADDR']TCP接続が接続されたIPアドレスであるかどうかは、SAPIに完全に依存します。
Pacerier 2015年

WEP / WPA WLANの攻撃者が実際のクライアントをキックオフし、そのIPアドレスをスプーフィングすることは不可能ではありません。WEPとWPAの両方に弱点がyou have been kicked off the wlanあり、適切なツールを使用してスプーフィングパケットを簡単に作成できます。WPA downgrade testたとえば、グーグル
hanshenrik 2017年

IPアドレスはTCPレベルではなくIPレベルです。
Viktor Joras 2018年

3

上記のように、それは絶対に安全ではありません。しかし、それはあなたがそれを使うべきではないという意味ではありません。これを他の認証方法、たとえばCOOKIE値のチェックと組み合わせることを検討してください。


6
IPアドレスをスプーフィングした後、httpリクエストを変更し、偽のCookieを送信するのは簡単なことです.....(またはCookieの一部)
Uri Goren 2016

1
「絶対に安全ではない」とはどういう意味か説明してください
ジェイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.