IIS 7.0 での要求のフィルタリングと URL の書き換え

作成者 : Ruslan Yakushev 発行日 : 2008 年 9 月 2 日 (作業者 : ruslany(英語))
更新日 : 2008 年 9 月 4 日 (作業者 : ruslany(英語))

IIS 要求処理パイプラインにおける要求のフィルタリングと URL の書き換え

最初に、要求フィルター モジュールと書き換えモジュールが IIS パイプラインにプラグインする方法について理解することが重要です。次の図に、これらの 2 つのモジュールの相対順序を示します。

 Dd939073.fi1_pipeline(ja-jp,TechNet.10).gif

要求フィルター モジュールは、BeginRequest イベントを処理することにより、要求処理パイプラインの開始時に実行されます。このモジュールでは、要求メタデータが既存のフィルターのいずれかに一致しているかどうかを判断するために、要求メタデータ (ヘッダー、クエリ文字列、コンテンツの長さなど) を評価します。一致した場合、モジュールは 404 (ファイルが見つかりません) 応答を生成し、IIS パイプラインの残りを迅速に処理します。

要求フィルター モジュールでフィルタリングが行われなかった場合は、要求は IIS パイプラインの次のモジュールに渡されます。この次のモジュールは URL の書き換えモジュールである可能性があります。URL 書き換えモジュールでは、書き換えルールと対照して要求を評価します。ルールが結果としてリダイレクトされたり、カスタム応答を送信したり、要求を中止したりした場合は、書き換えモジュールは適切な応答を生成し、IIS パイプラインの残りを迅速に処理します。

要求フィルター モジュールは URL 書き換えモジュールの前に配置されます。これは、IIS アーキテクチャでは、要求フィルター モジュールが、悪意のある要求から Web サーバーを保護するゲートキーパー コンポーネントであると見なされているからです。URL 書き換えモジュールは、要求フィルター モジュールによって既にフィルタリング済みの URL 上で機能するサーバーベースの URL 操作コンポーネントであると見なされています。URL の書き換えを、ASP.NET アプリケーションと同様のサーバーベースのアプリケーション ロジックとして考えることも可能です (ASP.NET アプリケーションでも書き換えまたはリダイレクトを実行できます)。要求のフィルタリングは 1 番目の防御ですが、URL の書き換えモジュールは、よりアプリケーション固有になっている 2 番目のセキュリティ防壁です。詳細については、IIS Web サイトのブログ投稿「Interaction between URL Rewriter and Request Filtering Modules for IIS7 (英語)」 を参照してください。

要求のフィルタリングと URL 書き換えの違い

要求のフィルタリングと URL の書き換えは、以下の点で異なります。

  • 要求のフィルタリングは、純粋にセキュリティ シナリオとして設計および最適化されています。
  • URL の書き換えは、幅広いシナリオに適用できます。セキュリティ シナリオは、その一部に過ぎません。

これを踏まえたうえで、セキュリティ シナリオに使用できる各モジュールの機能を比較できます。次のカテゴリを考慮する必要があります。

  1. フィルタリングの基準。要求のブロックについての決定を行うために使用できるのは、どのような入力ですか。また、要求ブロックのロジックを明示するために使用できるのは、どのような条件ですか。
  2. 要求ブロックのアクション。要求がフィルタリングの基準を満たした場合、どのようなアクションを実行できますか。
  3. パフォーマンスの影響。要求のフィルタリングとURL の書き換えが、Web サーバーのパフォーマンスにどのような影響を与えますか。

フィルタリングの基準

次の表に、可能なフィルタリングの基準を示し、各モジュールでそれらの基準をサポートする方法について説明します。

基準 要求フィルター モジュールでのサポート URL 書き換えモジュールでのサポート
要求される URL パスのスキャン あり。部分文字列検索を使用。 あり。正規表現パターンおよびワイルドカード パターンを使用。
URL の長さのチェック あり なし
クエリ文字列のスキャン なし あり。正規表現パターンおよびワイルドカード パターンを使用。
クエリ文字列の長さのチェック あり なし
HTTP の動詞のチェック あり あり
要求コンテンツの長さのチェック あり なし
HTTP ヘッダーのスキャン なし あり。正規表現パターンおよびワイルドカード パターンを使用。
HTTP ヘッダーの長さのチェック あり なし
サーバー変数のスキャン なし あり
送信者の IP アドレスまたはホスト名のチェック なし* あり

* IIS 7.0 の IP 制限モジュールは、特定の IP アドレスまたはホスト名からの要求をブロックするために使用できます。

要求ブロックのアクション

要求フィルター モジュールのアクションは 1 つだけです。このアクションは、要求がフィルタリングの基準に一致した場合に実行されます。このアクションとは、状態コード 404 (ファイルが見つかりません) を返すことです。

URL 書き換えモジュールでは、要求をブロックする必要がある場合、次のようなより広範なオプションが提供されます。

  1. 要求された URL は、他の URL に書き換えられます。たとえば、イメージのホットリンクを防止するために、サードパーティのドメインから来る要求に対して、URL をプレースホルダーのイメージ ファイルに書き換えることができます。
  2. Web クライアントを他の URL にリダイレクトできます。
  3. 選択した HTTP 状態コードを Web クライアントに送信できます。たとえば、特定のフィルタリング基準と一致した要求に対して、状態 401 (権限がありません) 応答を送信できます。
  4. HTTP 要求は、ソケット接続を切断することによって中止できます。したがって、Web クライアントでは Web サーバーについての情報をまったく取得できません。

パフォーマンスの影響

両方のモジュールは、IIS Web サーバーのパフォーマンスにほとんど影響を与えることなく実装されます。しかし、これらのモジュール間には、次に示す重要なパフォーマンスの違いがあります。

  • URL の書き換えモジュールは、正規表現パターンに大きく依存しています。正規表現の評価は負荷が大きく、多数の複雑な書き換えルールを定義した場合、Web サーバーのスループットが大きな影響を受ける可能性があります。
  • 要求フィルター モジュールでは、正規表現またはその他のパターン一致を使用しません。部分文字列検索を実行するだけです。そのため、Web サーバーのスループットへの影響は大幅に削減されます。

要求のフィルタリングと URL の書き換えの選択

Web サーバーのセキュリティを強化するために要求のフィルタリングと URL 書き換えのいずれかを選択する場合、原則的には要求のフィルタリングから開始します。要求のフィルタリングは、セキュリティ シナリオに対して最適化され、その機能セットは、セキュリティ要件を実装するには十分です。要求フィルター モジュールで対処できない要件がある場合は、その要件を実装するために URL 書き換えモジュールを使用し、その他のセキュリティ タスクは要求フィルター モジュールで処理するようにします。このようにして、サーバーが処理する書き換えルールを最小限に抑えることにより、URL 書き換えモジュールによるパフォーマンスの影響を低減します。