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, (^^ゞ