MW211 EXIT

devlog
SERVER_NAMEとHTTP_HOSTの違い
2013年04月27日
CGI環境変数「SERVER_NAME」($_SERVER['SERVER_NAME'])と
「HTTP_HOST」($_SERVER['HTTP_HOST'])の内容はたいていは同じなので混同してしまう。

これ二つの違いとは?
簡単にいえば、「SERVER_NAME」はサーバが持っている名前、
「HTTP_HOST」はブラウザがサーバ名として要求された名前
(人間に例えれば、「鈴木く~ん」と呼ばれた名前ってことか)ってこと。

よって、「クロスサイトスクリプトく~ん」と呼ばれる可能性があるので
「HTTP_HOST」を扱う場合には、サニタイズを施す必要がある。
#常識的には自ら「クロスサイトスクリプトくん」を自称することはないので
  「SERVER_NAME」の方はサニタイズ不要

もう少し厳密にいうと
【SERVER_NAME】
  Apacheの設定ファイル「httpd.conf」で設定している
  (文字通り)「ServerName」の値
  但し、「UseCanonicalName」が「On」に設定されないと反映されないらしく
  IPアドレスやドメイン名となることが多い
【HTTP_HOST】
  リクエスト電文中の「host:」の値

また、ポート番号(例えば「:8080」)を指定した場合は、
呼びかけた側の「HTTP_HOST」はポート番号も付随するが、
呼ばれた側の「SERVER_NAME」はサーバ名はポート番号を含まないので
ポート番号は除外された形となる(らしい)。
ちなみにポート「:80」で実験してみたが、
ブラウザが「:80」を勝手に省略してしまうらしく、差分はなかった。
分類:Apache