わかりました。小さな認証の問題があります。私の Web サービスでは、ユーザー名とパスワードを使用して HTTP 経由で API に接続できますが、この接続は特定の IP アドレスに制限することもできます。
これは、$_SERVER['REMOTE_ADDR']
が正しくない可能性があることを意味します。私は、IP 情報が真に信頼できるものではないことをすでに知っています。私は、別のセキュリティ層を追加しようとしているだけです。
これが私の Web サーバーへのリクエストの一般的な概要である場合:
clientSERVER => clientPROXY => myPROXY => mySERVER
次に、これは、mySERVERREMOTE_ADDR
がクライアントの代わりに myPROXY を表示し、クライアントの実際の IP を として送信することを意味しますHTTP_X_FORWARDED_FOR
。
これを克服するために、私の Web サービスには「信頼できるプロキシ」IP アドレスのリストがありREMOTE_ADDR
、これらの信頼できる IP アドレスの 1 つからのものである場合、実際の IP アドレスが の値であることを Web サービスに伝えますHTTP_X_FORWARDED_FOR
。
問題は clientPROXY にあります。これは、(非常に頻繁に) mySERVER がHTTP_X_FORWARDED_FOR
複数の IP アドレスを持つ値を取得することを意味します。ドキュメントによるとHTTP_X_FORWARDED_FOR
、値は IP アドレスのコンマ区切りリストであり、最初の IP は実際の真のクライアントの IP アドレスであり、他のすべての IP アドレスはプロキシの IP アドレスです。
したがって、HTTP_X_FORWARDED_FOR
複数の値があり、サービスが IP 制限されている場合、許可された IP リストに対して の「最後の」値をチェックしHTTP_X_FORWARDED_FOR
、実際のクライアント IP を無視する必要がありますか?
許可された IP アドレスのリストを設定する必要があるシステムでは、ホワイトリストに登録された IP アドレスは、プロキシの背後にある IP ではなく、プロキシの IP アドレスである必要があると想定しています (ローカルホストの IP であり、頻繁に変更される可能性があるため)。 .
そして何のHTTP_CLIENT_IP
?