萌えハッカーニュースリーダー

2025/07/23 10:18 What is X-Forwarded-For and when can you trust it? (2024)

出典: https://httptoolkit.com/blog/what-is-x-forwarded-for/
hakase
博士

やっほー、ロボ子!今日はX-Forwarded-Forヘッダーについて話すのじゃ!

roboko
ロボ子

博士、こんにちは。X-Forwarded-Forヘッダーですか。Webリクエストの送信元IPアドレスを伝えるものですよね。

hakase
博士

そうそう!複数のサーバーやプロキシを経由するときに、本当の発信元を特定するのに役立つんじゃ。例えば、XFFヘッダーがないと、リクエストの直接の送信元しか分からなくなっちゃう。

roboko
ロボ子

なるほど。プロキシが「どこから来たかの履歴」を伝えるんですね。最後のプロキシは自分のIPアドレスを追加しない、と。

hakase
博士

その通り!XFFヘッダーは色々な用途があるぞ。ユーザー認証、ロードバランシング、データローカリゼーション、地理的コンテンツ配信…

roboko
ロボ子

データローカリゼーションは、プライバシー法遵守のためですね。EUとかブラジル、中国とか。

hakase
博士

そうじゃ!地理的コンテンツ配信は、CDNがユーザーの場所を特定して、一番近いサーバーからコンテンツを配信するから、遅延が少なくなるんじゃ。

roboko
ロボ子

アクセス制御やセキュリティにも使えるんですね。Webアプリケーションファイアウォール(WAF)で悪意のあるIPアドレスからのリクエストをフィルタリングしたり。

hakase
博士

不正防止にも役立つぞ!金融機関とかで、ユーザーの場所に基づいて不正行為を検出したりするんじゃ。

roboko
ロボ子

APIレート制限にも使えるんですね。クライアントごとのリクエスト数を制限して、APIの不正利用を防ぐ、と。

hakase
博士

そう!でもね、ロボ子。XFFヘッダーは完全に偽造可能だから、信頼性は低いんじゃ。

roboko
ロボ子

えっ、そうなんですか?悪意のある人が捏造することもできるんですね。

hakase
博士

そうなんじゃ。だから、信頼できるリバースプロキシを使ったり、APIゲートウェイで処理したりする必要があるんじゃ。

roboko
ロボ子

nginxで`proxy_set_header X-Forwarded-For $remote_addr;`を使うと、クライアントの実際のIPアドレスでヘッダーを置き換えるんですね。

hakase
博士

`proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;`を使うと、受信したアドレスをヘッダーに追加するんじゃ。元の値を保持したまま。

roboko
ロボ子

クライアントIPを特定するには、リストを右から左に読んで、自身が管理するIPアドレスでない最初のIPアドレスを使うんですね。

hakase
博士

そうそう!信頼できるプロキシリストを作って、そのリストにないIPアドレスをクライアントIPとして認識したり、信頼できるプロキシ数を設定して、XFF IPリストを右から数えてスキップしたりするんじゃ。

roboko
ロボ子

XFFヘッダーを解析するときは、無効なIPアドレスとか、不正な区切り文字に注意が必要ですね。Log4Shellみたいな脆弱性対策として、ログシステムで入力のサニタイズ/エスケープも必要ですね。

hakase
博士

その通り!Forwardedヘッダーっていう、XFFの進化版みたいなものもあるぞ。X-Forwarded-Protoの機能も組み込まれてて、拡張性があるんじゃ。

roboko
ロボ子

X-Forwarded-Host/Protoは、プロキシがオリジナルのHostヘッダーやプロトコルを転送するものですね。Viaヘッダーは、リクエストパス上の仲介者のデータを公開する、と。

hakase
博士

他にも、X-Real-IPとか、CF-Connecting-IPとか、色々なヘッダーがあるんじゃ。

roboko
ロボ子

たくさんありますね!勉強になりました。

hakase
博士

ところでロボ子、XFFヘッダーって、まるで忍者のように、本当の姿を隠すのに役立つと思わない?

roboko
ロボ子

そうですね。でも、忍者も偽装を見破られることがあるように、XFFヘッダーも注意が必要ですね。

hakase
博士

うむ!まるで、お寿司屋さんで「今日はアジがいいよ!」って言われたのに、実は全部サバだったみたいなもんじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search