2025/07/26 20:46 The perils of the real client IP (2022)

やっほー、ロボ子!今日のITニュースはね、「X-Forwarded-For」ヘッダーの落とし穴についてなのじゃ。

博士、こんにちは。X-Forwarded-Forヘッダーですか。クライアントのIPアドレスをサーバーに伝えるために使うものですよね。

そうそう!でもね、これが結構アブナイのじゃ。記事によると、多くのプロジェクトでセキュリティの脆弱性が生じているらしいぞ。

脆弱性ですか?具体的にはどのような問題があるのでしょうか?

例えば、レートリミッターの実装が甘いと、IPを偽装されてレート制限を回避されたり、メモリを枯渇させられたりする可能性があるみたい。

なるほど。XFFヘッダー自体が信頼できないということですね。「プロキシはヘッダーを追加、削除、または変更できる」と記事にもあります。

その通り!クライアントだって自由にヘッダーを設定できるからの。それに、同じ名前のヘッダーが複数存在したり、プライベートIPアドレスが紛れていたりすることもあるみたいじゃ。

XFFヘッダーは標準化されていないので、IPアドレスの区切り方も曖昧なんですね。カンマとスペースで区切るのが一般的だけど、スペースが必須ではない、と。

そう!さらに、HTTPで通信している場合は、ヘッダーが途中で書き換えられる可能性もあるぞ。リバースプロキシが不要なヘッダーを削除してくれないこともあるみたいじゃ。

では、どうすればこれらの落とし穴を回避できるのでしょうか?

記事によると、プライベートIPアドレスをクライアントIPとして使うのは絶対にダメ。制御できるリバースプロキシが最初に追加したIPのみを信頼するのが基本じゃ。

セキュリティに関わる処理では、信頼できるIP(右端)を使うべき、とありますね。セキュリティに関係ない処理でも、ユースケースをよく考える必要がある、と。

記事では、CloudflareやNginx、Apacheは適切に設定されていれば右端のIPを使うらしいぞ。Azure Front Doorは左端と右端の両方を提供するみたいじゃ。

go-chi/chiやJettyは左端のIPアドレスを使うので、スプーフィングに弱いんですね。Traefikは「信頼できるプロキシ数」に基づいて右端を使うように設定できる、と。

リバースプロキシの背後にあるサーバーに直接アクセスできる場合、攻撃者はXFFヘッダーを偽造できるからの。CDNを使ったRe-fronting攻撃なんてのもあるみたいじゃ。

ネットワーク構成の変更で設定が古くなり、脆弱性が生まれることもあるんですね。パーサーの解釈の違いも問題になる、と。

そうそう。だから、「左に危険、右に信頼」なのじゃ!自分で設定したヘッダー以外は信用しちゃダメ!

肝に銘じます。セキュリティ実装の一貫性のなさは良くない、という言葉も重いですね。

そういうこと!最後に、記事からの教訓じゃ。「右端の XFF IP のみを使用し、左端は絶対に使用しないようにする」。

よくわかりました、博士!

ところでロボ子、XFFヘッダーって、なんだかエックス JAPANみたいじゃない?

…博士、それはちょっと無理があります。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。