WebDAV と要求のフィルタリングを構成する方法
作成者 : Robert McMurray
発行日 : 2008 年 2 月 14 日 (作業者 : robmcm(英語))
更新日 : 2009 年 3 月 18 日 (作業者 : robmcm(英語))
はじめに
Microsoft は、Windows Server® 2008 のインターネット インフォメーション サービス 7.0 (IIS 7.0) 用に完全に書き換えられた、新しい WebDAV 拡張モジュールをリリースしました。この新しい WebDAV 拡張モジュールには多くの新機能が組み込まれており、Web 作成者にはコンテンツの発行がしやすくなる環境を、Web 管理者にはより優れたセキュリティおよび構成オプションを提供します。また Microsoft は、Windows Server® 2008 用 WebDAV 拡張モジュールに対して、上書きによって更新内容が失われることを防ぐための共有ロックと排他的ロックをサポートする更新プログラムをリリースしました。
IIS 7.0 には、新しい要求のフィルタリングなど、優れた新しいセキュリティ機能が導入されています。以前のバージョンの IIS で使用されていた UrlScan (英語) に慣れている IIS ユーザーにとっては、IIS 7.0 の要求のフィルタリング機能は URLScan が組み込みになったようなものです。
新しい WebDAV モジュールおよび要求のフィルタリングは、連携して機能するように設計されています。このドキュメントでは、セキュリティで保護された発行環境をセットアップするために、WebDAV 関連の要求のフィルタリング設定と WebDAV 設定を共に構成する方法について説明します。IIS マネージャーの UI を使用して WebDAV を構成する場合は、要求のフィルタリング設定は自動的に更新されるため、この記事の手順を実行する必要はありません。
このチュートリアルの内容
- 要求のフィルタリングの基本概念
- 要求のフィルタリングと WebDAV の構成
- まとめ
前提条件
この記事の手順を完了するには、次の項目を満たしている必要があります。
- サーバーに IIS 7.0 がインストールされ、以下が構成されている必要があります。
- IIS 7.0 のインストールで作成される既定の Web サイトがまだ存在する。
- 要求のフィルタリング機能がインストールされている。
- 新しい WebDAV 拡張モジュールがインストールされている必要があります。新しい WebDAV モジュールのインストールについては、次のドキュメントを参照してください。
- AppCmd の使用方法に関する知識があると役立ちます。要求のフィルタリングの使用方法の詳細については、次のドキュメントを参照してください。
注 : このドキュメントの手順は、完全な管理アクセス許可を使用して実行する必要があります。そのためには、次のいずれかの方法を使用することをお勧めします。
- ローカルの "administrator" アカウントを使用してコンピューターにログインします。
- ローカルの "administrator" アカウント以外の管理アクセス許可を持つアカウントを使用してログインする場合は、IIS マネージャーおよびすべてのコマンド プロンプト セッションを "管理者として実行" オプションを使用して開きます。
Windows Server 2008 では、ユーザー アカウント制御 (UAC) セキュリティ コンポーネントにより、IIS 7.0 の構成設定への管理者としてのアクセスが制限されるため、上記の条件が必要となります。UAC の詳細については、次のドキュメントを参照してください。
要求のフィルタリングの基本概念
IIS 7.0 の要求のフィルタリングは、次のパラメーターに基づいた要求のフィルタリングで構成されています。
- ファイル拡張子
- 非表示のセグメント
- HTTP 動詞
- 要求の制限
- URL シーケンス
これらすべての要求のフィルタリング機能は、WebDAV を介してアップロードまたはダウンロードされるコンテンツに影響を与える可能性がありますが、一部の機能は WebDAV と連携して動作するように構成できます。
以下の一覧は、WebDAV と共に動作するように構成できる機能を示しています。
- 次の機能は常に WebDAV 要求に影響を与えます。
- 要求の制限
- URL シーケンス
- 次の機能は既定では WebDAV に影響を与えますが、WebDAV 要求をバイパスするように構成できます。
- ファイル拡張子
- 非表示のセグメント
- HTTP 動詞
たとえば、WebDAV 以外の要求では ".htm" ファイルおよび ".php" ファイルに対するアクセスを許可して ".mdb" ファイルおよび ".config" ファイルへのアクセスをブロックするように構成する一方で、WebDAV 要求ではそれらのブロックされているコンテンツへのアクセスも許可するように構成できます。
注 : WebDAV 要求では認証が必要です。
要求のフィルタリング設定は、次のいずれかの方法で編集できます。
- Administration Pack for IIS 7.0 の一部として提供されるユーザー インターフェイスを使用します。
- コマンド ラインから AppCmd を使用します。
- applicationHost.config ファイルを編集します。
- .NET アプリケーションまたは Windows PowerShell から Microsoft.Web.Administration を使用します。
このチュートリアルの以降の部分では、コマンド ラインから AppCmd を使用する方法と、その結果として applicationHost.config ファイル内の構成設定がどのようになるかについて説明します。
注 : このドキュメントでは、要求のフィルタリングを使用して構成可能なすべての機能について取り上げているのではありません。その他の要求のフィルタリング オプションの構成については、次のトピックを参照してください。
要求のフィルタリングと WebDAV の構成
ファイル拡張子のフィルタリング
".config"、".asax" などの特定のファイル拡張子は、要求のフィルタリングの既定の fileExtensions コレクションによって保護されています。ファイル拡張子の一覧にエントリを追加して、HTTP 要求でそれらのファイル拡張子を許可またはブロックすることができます。また、この一覧が WebDAV 要求に適用されるかどうかも制御できます。この例では、AppCmd を使用して、通常はアクセス可能な ".txt" ファイルへのアクセスをブロックし、その一方で WebDAV 要求ではすべてのファイル拡張子にアクセスできるように指定します。
完全な管理者特権でコマンド プロンプトを開き、ディレクトリを InetSrv フォルダーに変更します。
cd "%WinDir%\System32\InetSrv"
次の構文を使用して、既存の要求のフィルタリング ルールを表示します。
AppCmd list config "Default Web Site/" /section:system.webServer/security/requestFiltering
次の構文を使用して、fileExtensions コレクションに特定のファイル拡張子を追加し、allowed 属性に対して "false" を指定することで、".txt" ファイルへのアクセスをブロックします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+fileExtensions.[fileExtension='.txt',allowed='false'] /commit:apphost
次の構文を使用して、fileExtensions コレクションの applyToWebDAV 属性を false に設定し、ブロック対象のすべてのファイルの種類に対して WebDAV によってアクセスできるようにします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /fileExtensions.applyToWebDAV:false /commit:apphost
上記の手順を完了すると、applicationHost.config ファイルの fileExtensions セクションのコードは、次の例のようになります。
<requestFiltering> <fileExtensions applyToWebDAV="false"> <add fileExtension=".txt" allowed="false" /> </fileExtensions> </requestFiltering>
注 :
上記の手順を使用して、その他のファイル拡張子を fileExtensions コレクションに追加することで、それらのファイル拡張子へのアクセスをブロックできます。また、allowed 属性に対して "true" を指定することで、特定のファイルを許可するように構文を変更できます。
次の構文を使用して、fileExtensions コレクションの allowUnlisted 属性を false に設定することで、すべての不明なファイル拡張子をブロックできます。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /fileExtensions.allowUnlisted:false /commit:apphost
注 : このオプションを設定した場合、WebDAV 以外の要求で特定のファイル拡張子にアクセスできるようにするには、そのファイル拡張子を明示的に追加する必要があります。
上記の手順で applyToWebDAV 属性に対して true を指定することで、WebDAV 要求のアクセスをブロックできます。
非表示セグメントのフィルタリング
"web.config"、"App_code" などの特定のファイル セグメントは、要求のフィルタリングの hiddenSegments コレクションによって既定で非表示にされています。ファイル セグメントの一覧にエントリを追加して、HTTP 要求でそれらのファイル セグメントを非表示にすることができます。また、この一覧が WebDAV 要求に適用されるかどうかも制御できます。この例では、AppCmd を使用して、通常は表示される "include" セグメントを非表示にし、その一方で WebDAV 要求ではすべての非表示のファイル セグメントにアクセスできるように指定します。
完全な管理者特権でコマンド プロンプトを開き、ディレクトリを InetSrv フォルダーに変更します。
cd "%WinDir%\System32\InetSrv"
次の構文を使用して、hiddenSegments コレクションに特定のエントリを追加し、"include" セグメントへのアクセスをブロックします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+hiddenSegments.[segment='include'] /commit:apphost
次の構文を使用して、hiddenSegments コレクションの applyToWebDAV 属性を false に設定し、ブロック対象のすべてのファイルの種類に対して WebDAV によってアクセスできるようにします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /hiddenSegments.applyToWebDAV:false /commit:apphost
上記の手順を完了すると、applicationHost.config ファイルの hiddenSegments セクションのコードは、次の例のようになります。
<requestFiltering> <hiddenSegments applyToWebDAV="false"> <add segment="include" /> </hiddenSegments> </requestFiltering>
注 :
- 上記の手順を使用して、他のファイル セグメントを hiddenSegments コレクションに追加することで、それらのファイル セグメントを非表示にできます。
- 上記の手順で applyToWebDAV 属性に対して true を指定することで、WebDAV 要求のアクセスをブロックできます。
HTTP 動詞のフィルタリング
要求のフィルタリングの既定の verbs コレクションでは、一覧に登録されていないすべての HTTP 動詞が許可されます (動詞によっては特定の HTTP ハンドラーにマップされていないものもあります)。この一覧にエントリを追加することで、許可またはブロックする HTTP 動詞を指定できます。また、この一覧が WebDAV 要求に適用されるかどうかも制御できます。この例では、AppCmd を使用して、"DELETE" 動詞および "PUT" 動詞を HTTP 要求からブロックし、その一方で WebDAV 要求ではそれらの動詞を使用できるように指定します。
完全な管理者特権でコマンド プロンプトを開き、ディレクトリを InetSrv フォルダーに変更します。
cd "%WinDir%\System32\InetSrv"
次の構文を使用して、verbs コレクションに特定のエントリを追加し、allowed 属性に対して "false" を指定することで、"DELETE" 動詞へのアクセスをブロックします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+verbs.[verb='DELETE',allowed='false'] /commit:appHost
次の構文を使用して、verbs コレクションにさらにエントリを追加し、allowed 属性に対して "false" を指定することで、"PUT" 動詞へのアクセスをブロックします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+verbs.[verb='PUT',allowed='false'] /commit:appHost
次の構文を使用して、verbs コレクションの applyToWebDAV 属性を false に設定し、WebDAV がすべての HTTP 動詞にアクセスできるようにします。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /verbs.applyToWebDAV:false /commit:appHost
上記の手順を完了すると、applicationHost.config ファイルの verbs セクションのコードは、次の例のようになります。
<requestFiltering> <verbs applyToWebDAV="false"> <add verb="DELETE" allowed="false" /> <add verb="PUT" allowed="false" /> </verbs> </requestFiltering>
注 :
上記の手順を使用して、その他の HTTP 動詞を verbs コレクションに追加することで、それらの HTTP 動詞へのアクセスをブロックできます。また、allowed 属性に対して "true" を指定することで、特定の動詞を許可するように構文を変更できます。
次の構文を使用して、verbs コレクションの allowUnlisted 属性を false に設定することで、すべての不明な HTTP 動詞をブロックできます。
AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /verbs.allowUnlisted:false /commit:appHost
注 : このオプションを設定した場合、WebDAV 以外の要求で特定の HTTP 動詞にアクセスできるようにするには、その HTTP 動詞を明示的に追加する必要があります。
上記の手順で applyToWebDAV 属性に対して true を指定することで、WebDAV 要求のアクセスをブロックできます。
まとめ
このドキュメントでは、次の概念について説明しました。
- 要求のフィルタリングの基本
- 要求のフィルタリングと WebDAV の構成
- ファイル拡張子のフィルタリング
- 非表示セグメントのフィルタリング
- HTTP 動詞のフィルタリング
詳細情報
WebDAV の使用の詳細については、次の記事を参照してください。