Windows ServerのIIS 7.0〜8.5で稼働しているWebサイトで、パス(URL)に「+」「%」などを含むページを開こうとすると404エラーが発生することがある。これはIISのデフォルトの設定が原因だ。設定を変更して解消するには?
対象ソフトウエア:IIS 7.0/IIS 7.5/IIS 8.0/IIS 8.5
Windows Server 2003のIIS 6.0あるいはApache Webサーバーといったプラットフォームから、Windows Server 2008〜2012 R2のIIS 7.0〜8.5にWebサイトを移設した場合、たとえ静的で単純なWebページであっても正しく表示されないことがある。
例えば以下のように、クエリ文字列以外のパス(URL)に「+」「%」といった記号が含まれている場合が挙げられる
IIS 7.0〜8.5で稼働しているWebサイトでは通常、上記URLのページを開こうとすると、以下のように404エラーが返される。
もっとも、404エラーが発生する原因はたくさんある。そこで、もっと詳細なエラー情報を得るために、対象のIISが稼働しているコンピューター上でIEを起動し、対象ページを開いてみたのが以下の画面である。
このような症状の場合、IISがデフォルトで拒否する「ダブルエスケープシーケンス」がURLに使われているのが原因である。具体的には、クエリ文字列を除くURLに「+」「%25<16進数を表す文字列>」といったパターンが含まれていると、IISはそのURLを拒否し、HTTPエラー404.11を返す。
デフォルトでこうした設定がなされているのは、エスケープ記号でURLに細工をすることでWebサーバーを攻撃する手法が存在するからだ。
そのため、可能であれば「+」「%」を含まないURLに変更した方が安全だ。とはいえ、互換性などの都合からURLを変更できないこともあるだろう。その場合は、他の方法で攻撃を防止あるいは回避するようにしつつ、IISでダブルエスケープシーケンスを許可することになる。こうした前提の下で、本TIPSではその具体的な設定手順を説明する。
IISのWebサーバー全体あるいはWebサイト、フォルダー単位でダブルエスケープシーケンスを許可するには、IISマネージャーの左ペインで対象のサーバー/サイト/フォルダーのいずれかを選択した後に、真ん中のペインから[要求フィルター]−[機能設定の編集]とクリックして、[ダブル エスケープを許可する]にチェックを入れてオンにする。
以上で作業は完了だ。設定変更は即座に反映されるので、試しに404.11エラーが生じていたページを再び読み込んでみよう。エラーの原因が要求フィルターだったなら、今度は正常な応答が得られるはずだ。
単独のファイルだけにダブルエスケープシーケンスを許可するには、IISマネージャーのコンテンツビューで対象ファイルを選択してから、機能ビューに戻って[要求フィルター]アイコンをダブルクリックし、前述の手順でダブルエスケープシーケンスの設定を変更する。
コマンドラインでダブルエスケープシーケンスの設定を変更することも可能だ。それにはIIS標準のappcmd.exeコマンドを利用する。例えば「Default Web Site」というWebサイト全体でダブルエスケープシーケンスを許可するには、次のコマンドラインを実行する。
%SystemRoot%\system32\inetsrv\appcmd.exe set config "Default Web Site" /section:requestfiltering /allowdoubleescaping:true
サーバー全体やフォルダー(仮想ディレクトリ)単位でも設定可能だ。その場合のコマンドラインについては、次のページが参考になる。
■関連リンク
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.