次の方法で共有


拒否するクエリ文字列シーケンス <denyQueryStringSequences>

概要

<denyQueryStringSequences> 要素には、IIS が拒否するクエリ文字列文字のシーケンスを指定する <add> 要素のコレクションが含まれます。これは、クエリ文字列を使用して攻撃ペイロードを配信する Web サーバーへの攻撃を防ぐのに役立ちます。

Note

<alwaysAllowedQueryStrings> コレクションにクエリ文字列シーケンスを追加することで、このコレクション内のクエリ文字列シーケンスをオーバーライドできます。

Note

要求のフィルタリングが、クエリ文字列シーケンスが拒否されたために HTTP 要求をブロックすると、IIS 7 は HTTP 404 エラーをクライアントに返し、要求が拒否された理由を識別する一意のサブ状態で次の HTTP 状態をログに記録します。

HTTP サブ状態 説明
404.18 クエリ文字列シーケンスの拒否

このサブ状態によって、Web 管理者は IIS ログを分析し、潜在的な脅威を特定できます。

互換性

バージョン メモ
IIS 10.0 <denyQueryStringSequences> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <denyQueryStringSequences> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 <denyQueryStringSequences> 要素は IIS 8.0 では変更されませんでした。
IIS 7.5 <requestFiltering> 要素の <denyQueryStringSequences> 要素は、IIS 7.5 の機能として付属しています。
IIS 7.0 <requestFiltering> 要素の <denyQueryStringSequences> 要素は、Microsoft サポート技術情報の記事 957508 (https://support.microsoft.com/kb/957508) で入手できる IIS 7.0 の更新プログラムとして導入されました。
IIS 6.0 <denyQueryStringSequences> 要素は、URLScan 3.0 に追加された [DenyQueryStringSequences] セクションとほぼ同じです。

段取り

IIS 7 以降の既定のインストールには、要求のフィルタリングの役割サービスまたは機能が含まれます。 要求のフィルタリングの役割サービスまたは機能がアンインストールされている場合は、次の手順を使用して再インストールできます。

Windows Server 2012 または Windows Server 2012 R2

  1. タスク バーで [サーバー マネージャー]をクリックします。
  2. [サーバー マネージャー] で、[管理] メニューを選択し、[役割と機能の追加] を選択します。
  3. [役割と機能の追加] ウィザードで、[次へ] をクリックします。 インストールの種類を選択し、[次へ] をクリックします。 対象サーバーを選択し、[次へ] を選択します。
  4. [サーバーの役割] ページで [Web サーバー (IIS)] を展開し、[Web サーバー][セキュリティ][要求のフィルタリング] の順に展開します。 次へ をクリックします。
    [Web サーバーとセキュリティ] ウィンドウが展開され、[要求のフィルター処理] が選択されていることを示すスクリーンショット。 .
  5. [機能の選択] ページで、[次へ] をクリックします。
  6. [インストール オプションの確認] ページで、[インストール] をクリックします。
  7. [結果] ページで、 [閉じる]をクリックします。

Windows 8 または Windows 8.1

  1. [スタート] 画面で、ポインターを左下隅まで移動し、[スタート] ボタンを右クリックし、[コントロール パネル] をクリックします。
  2. [コントロール パネル][プログラムと機能] を選択し、[Windows の機能の有効化または無効化] を選択します。
  3. [インターネット インフォメーション サービス]を展開し、[World Wide Web サービス] を展開し、[セキュリティ] を展開して、[要求のフィルタリング] を選択します。
    [要求のフィルター処理] が選択された状態で展開された [World Wide Web サービスとセキュリティ] ウィンドウを示すスクリーンショット。
  4. OK をクリックします。
  5. 閉じるをクリックします。

Windows Server 2008 または Windows Server 2008 R2

  1. タスク バーで [スタート] をクリックし、[管理ツール] をポイントして、[サーバー マネージャ] をクリックします。
  2. [サーバー マネージャ] 階層ウィンドウで [役割] を展開し、[Web サーバー (IIS)] をクリックします。
  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールし、[役割サービスの追加] を選択します。
  4. 役割サービスの追加ウィザード[役割サービスの選択] ページで、[要求のフィルタリング] を選択し、[次へ] を選択します。
    [セキュリティ] ウィンドウが展開され、[要求のフィルター] が選択されている [ロール サービスの選択] ページのスクリーンショット。
  5. [インストール オプションの確認] ページで、[インストール] をクリックします。
  6. [結果] ページで、 [閉じる]をクリックします。

Windows Vista または Windows 7

  1. タスク バーで、[スタート][コントロール パネル] の順にクリックします。
  2. [コントロール パネル][プログラムと機能] を選択し、[Windows の機能の有効化または無効化] を選択します。
  3. [インターネット インフォメーション サービス][World Wide Web サービス][セキュリティ] の順に展開します。
  4. [要求のフィルタリング] を選択し、[OK] を選択します。
    [要求のフィルター処理] が選択されていることを示す [セキュリティ] ウィンドウが展開されているスクリーンショット。

操作方法

クエリ文字列シーケンスを拒否する方法

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、要求のフィルタリング設定を変更する接続、サイト、アプリケーション、またはディレクトリに移動します。

  3. [ホーム] ウィンドウで、[要求のフィルタリング] をダブルクリックします。

  4. [要求のフィルタリング] ウィンドウで、[クエリ文字列] タブを選択し、[操作] ウィンドウの [クエリ文字列の拒否] を選択します。

  5. [クエリ文字列の拒否] ダイアログ ボックスで、ブロックするクエリ文字列シーケンスを入力し、[OK] を選択します。

構成

<requestFiltering> 要素の <denyQueryStringSequences> 要素は、サイト、アプリケーション、またはディレクトリ レベルで構成されます。

属性

なし。

子要素

要素 説明
add 省略可能な要素です。

拒否されたクエリ文字列のコレクションにクエリ文字列を追加します。
clear 省略可能な要素です。

クエリ文字列へのすべての参照をコレクションから削除します。
remove 省略可能な要素です。

拒否されたクエリ文字列のコレクションからクエリ文字列を削除します。

構成サンプル

次の例では、2 つの特定の文字シーケンスのいずれかが含まれている場合にクエリ文字列を拒否する <denyQueryStringSequences> 要素と <alwaysAllowedQueryStrings> 要素の組み合わせを示しますが、これらの 2 つの特定の文字シーケンスの両方を特定の順序で含む特定のクエリ文字列が常に許可されます。

<system.webServer>
   <security>
      <requestFiltering>
         <denyQueryStringSequences>
            <add sequence="bad" />
            <add sequence="sequence" />
         </denyQueryStringSequences>
         <alwaysAllowedQueryStrings>
            <add queryString="bad=sequence" />
         </alwaysAllowedQueryStrings>
      </requestFiltering>
   </security>
</system.webServer>

サンプル コード

次の例では、既定の Web サイトで拒否されるクエリ文字列シーケンスを追加する方法を示します。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyQueryStringSequences.[sequence='bad_querystring_sequence']"

PowerShell

$denyQueryStringSequences = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigCollection -CollectionName 'denyQueryStringSequences'
New-IISConfigCollectionElement -ConfigCollection $denyQueryStringSequences -ConfigAttribute @{ 'sequence' = 'bad_querystring_sequence' }

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

         ConfigurationElementCollection denyQueryStringSequencesCollection = requestFilteringSection.GetCollection("denyQueryStringSequences");
         ConfigurationElement addElement = denyQueryStringSequencesCollection.CreateElement("add");
         addElement["sequence"] = @"bad_querystring_sequence";
         denyQueryStringSequencesCollection.Add(addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim requestFilteringSection As ConfigurationSection = config.GetSection("system.webServer/security/requestFiltering")

      Dim denyQueryStringSequencesCollection As ConfigurationElementCollection = requestFilteringSection.GetCollection("denyQueryStringSequences")
      Dim addElement As ConfigurationElement = denyQueryStringSequencesCollection.CreateElement("add")
      addElement("sequence") = "bad_querystring_sequence"
      denyQueryStringSequencesCollection.Add(addElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";
var requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");

var denyQueryStringSequencesCollection = requestFilteringSection.ChildElements.Item("denyQueryStringSequences").Collection;
var addElement = denyQueryStringSequencesCollection.CreateNewElement("add");
addElement.Properties.Item("sequence").Value = "bad_querystring_sequence";
denyQueryStringSequencesCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"
Set requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site")

Set denyQueryStringSequencesCollection = requestFilteringSection.ChildElements.Item("denyQueryStringSequences").Collection
Set addElement = denyQueryStringSequencesCollection.CreateNewElement("add")
addElement.Properties.Item("sequence").Value = "bad_querystring_sequence"
denyQueryStringSequencesCollection.AddElement(addElement)

adminManager.CommitChanges()