ホームページ >バックエンド開発 >PHPチュートリアル >Web サイトの Web サーバー側でユーザー IP を本当に制限できるでしょうか?
先ほどnginxのアップストリーム転送と転送元IPの変更について質問させていただきましたが、アクセス要求元のIPは自由に変更できるため、Webサーバー上で取得するIPを完全に信頼できるわけではありません。ユーザーの実際の IP アドレスですか? それともこのパスは実際には不可能ですか?
先ほどnginxのアップストリーム転送と転送元IPの変更について質問させていただきましたが、アクセス要求元のIPは自由に変更できるため、Webサーバー上で取得するIPを完全に信頼できるわけではありません。ユーザーの実際の IP アドレスですか? それともこのパスは実際には不可能ですか?
nginx は [あなた] によって構築されましたか、それとも [禁止されたユーザー] によって構築されましたか?
HTTP_X_FORWARD_FOR は偽造できますが、REMOTE_ADDR は変更できません。
[禁止されたユーザー] によって構築された場合:
$_SERVER["REMOTE_ADDR"] を通じて nginx サーバーの IP を取得し、直接ブロックできます。
[あなたが] nginx を構築した場合:
ユーザーの IP は $_SERVER["HTTP_X_FORWARD_FOR"] を通じて取得できますが、偽造される可能性があります。
最善の方法は、nginx が転送するときにプライベート HTTP ヘッダーを追加することです。何を偽る必要があるのかわかりません。
リーリーさらに、アリババの WW で現在使用されているプロキシ プラットフォームの HL システムは、HTTP_X_FORWARD_FOR によって厳密にフィルタリングされていないため、慎重に構築されたリクエストが注入される可能性があります。 。 。 (現在は新しいバージョンが修正されています)
偽造に関しては、Linux/Unix/OSX を使用している場合は、組み込みのカールで行うことができます:
リーリーフィルタリングしない場合、IP を通じてブラックリストに登録するか、バックグラウンドで IP 操作ログを記録するかを直接決定する機能が存在します:
リーリー
nginx を構成するときに、proxy_set_header X-Forward-For $remote_addr 構成を追加できる計画を思いつきました。次に、$_SERVER["HTTP_X_FORWARD_FOR"] がユーザーの実際の IP を取得し、プログラム内で IP を制限します。