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は不可)