HostヘッダーなしでプライベートIPがLocationヘッダーに出力される件

http://www.intellilink.co.jp/article/column/security-net02.html

通常、下のようなURLにアクセスし、
http://example.com/img
サーバ内のDocumentRootにimgというファイルが存在しない場合、

Location:http://example.com/img/

のヘッダーが吐き出され、http://example.com/img/ にリダイレクトする

ある特定の条件下で、

Location:http://192.168.0.1/img/

のようにプライベートIP漏洩するケースがある

条件は

  • HTTP/1.0
  • クライアントからHostヘッダーの送信なし (HTTP/1/1は必須)
  • apacheの場合、httpd.confのServerNameディレクティブが未定義 vhostsのServerNameは関係しない

理屈としては、LocationヘッダーによるリダイレクトはHostヘッダーを見て定義する、存在しない場合はServerNameディレクティブの値とするということらしい。

解決はhttpd.confのServerNameディレクティブを設定することで対応できる (vhostsは不可)