2009-11-04 7 views
5

今日、私はPHPベースアプリケーションのかなり奇妙な動作を見てきました。 システムの特定の部分には、AJAX呼び出しを使用して、 ボックスにバックエンドの内容のリストを埋め込むUIがあります。php/ajax REMOTE_ADDRが偽のネットワークアダプタのIPに設定されました

ここで、AJAXリスナーはすべての着信要求に対してセキュリティチェックを行い、有効なクライアントIPだけが応答を受け取るようにします。 有効なIPはバックエンドにも格納されます。私はクライアントのほとんどのために働く昔ながら

$_SERVER['REMOTE_ADDR'] 

を使用し、クライアントのIPを取得するには

。今日私は remote_addrに、私のアプリケーションの実際の通信を 実行したものではないネットワークアダプタのIPが含まれていたインストールを実行しました。

私agve Roshan's Blog entry on the topuicを周りグーグル:

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

悲しいことに問題が解消されません。

誰かがこの種の問題に遭遇したことはありますか(実際に私は完全に新しい問題を発見したとは思えません^^)、これを修正する方法が私にはありますか?

編集:私は通信が行われている

  • PHPバージョン5.2.9-1
  • のApache/2.2.9(Win32の)によ

    通常のLANカードを介して。現在、アクチュアリクライアントには複数のデバイスが追加されています( )。 VMNetアダプタなど。

    私は、クライアントの設定は「ディスターブ」くらいのWebサーバ...

    TIA

    はK

+1

ここでは、アダプターとアプリケーションを実行しているサーバーについていくつかの詳細を記入できますか。例のシナリオは、クライアント側で次のようになりますので、 –

+0

のplsは私のほか – KB22

+0

を参照してください。 はeth0 - 10.0.0.1 eth1の - 10.1.1.1 、サーバ上の要求は、クライアントの代わりに、10.1から通過するときuは10.1.1.2を持っており、 .1.1 10.0.0.1を示していますか? –

答えて

4

は、残念ながら、あなたは穀物で、すべてのIP情報を取ることができますどのように思ったんだけど塩の。

IPアドレスは、パケットと要求情報を考慮して要求中に収集されます。悲しいことに、この情報は簡単に偽装されたり、不正確であったり(多数のネットワーク確率に基づく)、虚栄心の目的以外には使用しないでください。

+0

これはThxですが、推奨できるベストプラクティスはありますか? – KB22

+1

あなたの質問のコードは、私が「最良の選択肢」として見たものです。ほとんどの場合、正しいIPをキャッチします。私は必ずしも結果を信頼するとは限りません。 –

+1

私はCを受け入れましたが、実際にはREMOTE_ADDRなどが実際にApacheによってどのように設定されているかについていくつか読んでおくことをお勧めしますか?私は何が問題になっているのかをよく理解したいと思う。 TIA – KB22

関連する問題