動詞 <verbs>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<verbs> 要素は、Web サーバーによって許可される HTTP 要求の種類を制限するために、許可または拒否される HTTP 動詞を指定します。

: HTTP 動詞の拒否によって、要求のフィルタリングで HTTP 要求がブロックされると、IIS 7.0 は HTTP 404 エラーをクライアントに返し、次の HTTP 状態、および要求が拒否された理由を示す固有の副状態をログに記録します。

HTTP 副状態 説明
404.6 動詞が拒否されました。

Web 管理者は、この副状態を使用して IIS ログを分析し、潜在的な脅威を特定することができます。

互換性

  IIS 7.0 IIS 6.0
説明 <requestFiltering> コレクションの <verbs> は IIS 7.0 で新たに導入された要素です。 <verbs> 要素は、IIS 6.0 の UrlScan の AllowVerbs 機能および DenyVerbs 機能に代わるものです。

セットアップ

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

Windows Server 2008

  1. タスク バーの [スタート] ボタンをクリックし、[管理ツール] をポイントして [サーバー マネージャー] をクリックします。

  2. [サーバー マネージャー] のツリー表示で、[役割] を展開して [Web サーバー (IIS)] をクリックします。

  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールして [役割サービスの追加] をクリックします。

  4. 役割サービスの追加ウィザードの [役割サービスの選択] ページで、[要求フィルタ] を選択して、[次へ] をクリックします。

    拡大

  5. [インストール オプションの確認] ページで [インストール] をクリックします。

  6. [結果] ページで [閉じる] をクリックします。

Windows Vista

  1. タスク バーの [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。

  2. [コントロール パネル][プログラムと機能] をクリックして、[Windows の機能の有効化または無効化] をクリックします。

  3. [Internet Information Services][World Wide Web サービス][セキュリティ] の順に展開します。

  4. [要求のフィルタリング] を選択して、[OK] をクリックします。

    拡大

方法

: このセクションの手順を実行するには、要求のフィルタリング用のユーザー インターフェイスが含まれている Microsoft Administration Pack for IIS 7.0 をインストールする必要があります。Microsoft Administration Pack for IIS 7.0 をインストールするには、次の URL を参照してください。

http://learn.iis.net/page.aspx/415/

HTTP 動詞を拒否する方法

  1. タスク バーの [スタート] ボタンをクリックして、[管理ツール] をポイントし、[インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。

  2. [接続] ウィンドウで、要求のフィルタリングの設定を変更する接続、サイト、アプリケーション、またはディレクトリに移動します。

  3. [ホーム] ウィンドウで [Request Filtering] をダブルクリックします。

    拡大

  4. [Request Filtering] ウィンドウで、[HTTP verbs] タブをクリックし、[操作] ウィンドウで [Deny Verb] をクリックします。

    拡大

  5. [Deny Verb] ダイアログ ボックスで、ブロックする HTTP 動詞を入力し、[OK] をクリックします。

    拡大

    たとえば、サーバーに対する HTTP TRACE 要求を防ぐには、ダイアログ ボックスに「TRACE」と入力します。

構成

属性

属性 説明
allowUnlisted オプションの Boolean 属性。

Web サーバーで一覧にない動詞を処理するかどうかを指定します。この属性を true に設定すると、拒否するすべての動詞を一覧に含める必要があります。この属性を false に設定すると、許可するすべての動詞を一覧に含める必要があります。

既定値は true です。
applyToWebDAV オプションの Boolean 属性。

これらの設定を WebDAV 要求にも適用するかどうかを指定します。

子要素

要素 説明
add オプションの要素。

動詞のコレクションに動詞を追加します。
clear オプションの要素。

動詞のコレクションから動詞の参照をすべて削除します。
remove オプションの要素。

動詞のコレクションから動詞の参照を 1 つ削除します。

構成サンプル

次のサンプル Web.config ファイルでは、2 つのオプションを構成します。まず、HTTP PUT 要求を拒否するように IIS を構成します。また、WebDAV アクセスですべての HTTP 動詞が許可されるように要求のフィルタリングを構成します。

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>

            <verbs applyToWebDAV="false">
               <add verb="PUT" allowed="false" />
            </verbs>
         </requestFiltering>
      </security>
   </system.webServer>

</configuration>

サンプル コード

次のコード サンプルでは、2 つのオプションを構成します。まず、Default Web Site で HTTP PUT 要求を拒否するように IIS を構成します。また、WebDAV アクセスですべての HTTP 動詞が許可されるように要求のフィルタリングを構成します。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /verbs.applyToWebDAV:"False"

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"verbs.[verb='PUT',allowed='False']"

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");

         ConfigurationElement verbsElement = requestFilteringSection.GetChildElement("verbs");
         verbsElement["applyToWebDAV"] = false;
         ConfigurationElementCollection verbsCollection = verbsElement.GetCollection();

         ConfigurationElement addElement = verbsCollection.CreateElement("add");
         addElement["verb"] = @"PUT";
         addElement["allowed"] = false;
         verbsCollection.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 verbsElement As ConfigurationElement = requestFilteringSection.GetChildElement("verbs")
      verbsElement("applyToWebDAV") = False
      Dim verbsCollection As ConfigurationElementCollection = verbsElement.GetCollection

      Dim addElement As ConfigurationElement = verbsCollection.CreateElement("add")
      addElement("verb") = "PUT"
      addElement("allowed") = False
      verbsCollection.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 verbsElement = requestFilteringSection.ChildElements.Item("verbs");
verbsElement.Properties.Item("applyToWebDAV").Value = false;
var verbsCollection = verbsElement.Collection;

var addElement = verbsCollection.CreateNewElement("add");
addElement.Properties.Item("verb").Value = "PUT";
addElement.Properties.Item("allowed").Value = false;
verbsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.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 verbsElement = requestFilteringSection.ChildElements.Item("verbs")
verbsElement.Properties.Item("applyToWebDAV").Value = False
Set verbsCollection = verbsElement.Collection

Set addElement = verbsCollection.CreateNewElement("add")
addElement.Properties.Item("verb").Value = "PUT"
addElement.Properties.Item("allowed").Value = False
verbsCollection.AddElement(addElement)

adminManager.CommitChanges()