2011-01-23 41 views
72

$_SERVER['REMOTE_ADDR']を信頼するのは安全ですか?要求のヘッダーなどを変更して代用することはできますか?

このような記述は安全ですか?

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

既存の回答に加えて、それは常にサーバーに要求したIPアドレスですが、要求を開始したコンピュータのIPアドレスであるとは限りません。任意の数のプロキシサーバーがユーザーとエンドユーザーの間に存在する可能性があります。最も近いものは、取得するIPアドレスです。 –

+0

はい、安全です。別のトリックや不正行為によって補完することはできないからです。 $ grant_all_admin_rights変数のチェックを追加してください。 –

+0

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

答えて

88

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

リバースプロキシの背後にある場合、REMOTE_ADDRは常にプロキシサーバーのIPになり、ユーザーのIPはHTTPヘッダーで提供されます(X-Forwarded-Forなど)。 )。しかし、通常の使用の場合、REMOTE_ADDRの読み取りは問題ありません。

+3

IPアドレスのなりすましはどうですか? – Abdull

+0

@Abdullこれを行うことができる人は、通常、あなたの箱に物理的にアクセスできる人と同じです。それほど心配しないでください。 – Behrooz

+3

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

52

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

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

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

+4

あなたはインターネットプロトコルについて非常に知らされています。 –

+0

@phihag '$ _SERVER ['REMOTE_ADDR']'がTCP接続が入ったIPアドレスであるかどうかは、あなたのSAPIによってまったく決まります。 – Pacerier

+0

WEP/WPA WLAN上の攻撃者が実際のクライアントを蹴飛ばすほど遠くないため、そのIPアドレスを偽装する - WEPとWPAの両方に脆弱性があるため、あなたは作成しやすいwlanパケットで偽装されている適切なツール。 google 'WPA downgrade test'、例えば – hanshenrik

3

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

+5

IPアドレスを詐称した後、httpリクエストを変更して誤ったクッキーを送ることは、ケーキの一部です.....(またはクッキーの一部) –

+0

絶対に安全 " – Jake

関連する問題