Shikata Ga Nai

Private? There is no such things.

HTTP Hostヘッダーの基礎とその重要性

Hello there, ('ω')ノ

🏷 HTTP Hostヘッダーとは?

Host ヘッダーは、HTTP/1.1 以降で必須となっているリクエストヘッダーの一つです。このヘッダーには、クライアントがアクセスしようとしているドメイン名が含まれます。

例えば、以下のようなリクエストが送信されます:

GET /web-security HTTP/1.1
Host: portswigger.net

このように、Host ヘッダーは「このリクエストはどのホスト宛なのか?」という情報をサーバに伝える役割を担っています。


🧭 なぜHostヘッダーが必要なのか?

1. IPアドレスの共有(バーチャルホスティング)

現在では、複数のドメインが1つのIPアドレスを共有することが一般的です。たとえば、クラウドサービス上で同一IPに対して複数のウェブサイトがホストされていることがあります。

このような場合、Host ヘッダーがないと、サーバーは「どのサイトへのリクエストなのか」が判断できません。

🗂 例:マンションの郵便受け

  • マンションの住所(IPアドレス)は共通。
  • 宛名(Hostヘッダー)に部屋番号がなければ、誰宛か分からない!

2. 逆プロキシやロードバランサーの存在

CDNやWAFなど、リクエストが仲介サーバー(プロキシ)を経由することも多くなっています。

この仲介サーバーは、Host ヘッダーを見て、リクエストを適切なバックエンドサーバーへルーティングしています。


🔐 セキュリティ観点での注意点

Host ヘッダーはユーザーから改ざん可能な値であるため、次のような脆弱性の原因となることがあります:

  • ホストヘッダーインジェクション(例:リセットメールURLの改ざん)
  • SSRF(サーバーサイドリクエストフォージェリ)
  • キャッシュポイズニング

こういった攻撃は、バックエンドがHostの値を過信している場合に発生します。


✅ まとめ

項目 内容
Hostヘッダーの役割 リクエストの宛先ホストを指定
使用理由 1つのIPで複数のサイトをホストできるようにするため
セキュリティリスク ユーザーが任意に変更できるため、サーバー側の検証が必須

Best regards, (^^ゞ