信頼しても大丈夫$_SERVER['REMOTE_ADDR']
ですか?リクエストのヘッダーなどを変更して置き換えることはできますか?
そのようなものを書くのは安全ですか?
if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
$grant_all_admin_rights = true;
}
信頼しても大丈夫$_SERVER['REMOTE_ADDR']
ですか?リクエストのヘッダーなどを変更して置き換えることはできますか?
そのようなものを書くのは安全ですか?
if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
$grant_all_admin_rights = true;
}
$_SERVER['REMOTE_ADDR']
リクエストヘッダーを設定して変数をスプーフィングすることはできません。PHPHTTP_
は、$_SERVER
スーパーグローバルでキーを作成するときに、すべてのHTTPリクエストヘッダーの前に自動的にプレフィックスを付けます。
回答:
はい、安全です。これはTCP接続の送信元IPであり、HTTPヘッダーを変更して置き換えることはできません。
心配したい場合の1つは、リバースプロキシの背後にいる場合です。この場合、REMOTE_ADDRは常にプロキシサーバーのIPになり、ユーザーIPはHTTPヘッダー(X-Forwarded-Forなど)で提供されます。)。ただし、通常のユースケースでは、REMOTE_ADDRを読み取ることで問題ありません。
$_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アドレスを使用できます。
$_SERVER['REMOTE_ADDR']
TCP接続が接続されたIPアドレスであるかどうかは、SAPIに完全に依存します。
you have been kicked off the wlan
あり、適切なツールを使用してスプーフィングパケットを簡単に作成できます。WPA downgrade test
たとえば、グーグル
上記のように、それは絶対に安全ではありません。しかし、それはあなたがそれを使うべきではないという意味ではありません。これを他の認証方法、たとえばCOOKIE値のチェックと組み合わせることを検討してください。