ファイル名拡張子 <fileExtensions>

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

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

概要

<fileExtensions> 要素には <add> 要素のコレクションが含まれ、一意のファイル名拡張子を指定します。このファイル名拡張子は、各 <add> 要素がどのように定義されているかに応じて、IIS で許可または拒否されます。<fileExtensions> 要素を使用することにより、Web クライアントで使用可能にするサーバーのコンテンツの種類を微調整できます。

たとえば、allowUnlisted 属性を false に設定すると、許可された拡張子のリストに含まれない拡張子を持つファイルに対するすべての要求が拒否されます。<clear> 要素を使用すると、既に定義されたファイル名拡張子のリストをクリアしてから、許可するファイル名拡張子のみを指定できます。

: 拒否対象のファイル名拡張子により、要求のフィルタリングが HTTP 要求をブロックすると、IIS 7.0 は HTTP 404 エラーをクライアントに返し、要求が拒否された理由を特定する固有の副状態と共に次の HTTP 状態をログに記録します。

HTTP 副状態 説明
404.7 ファイル拡張子が拒否されました。

この副状態により、Web 管理者は IIS ログを分析し、潜在的な脅威を識別できます。

互換性

  IIS 7.0 IIS 6.0
注意 <requestFiltering> コレクションの <fileExtensions> は IIS 7.0 で新たに導入された要素です。 <fileExtensions> 要素は、IIS 6.0 の UrlScan "AllowExtensions" 機能および "DenyExtensions" 機能に代わるものです。

セットアップ

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/

特定のファイル名拡張子へのアクセスを拒否する方法

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

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

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

    拡大

  4. [要求のフィルタリング] ウィンドウで、[File Name Extensions] タブをクリックし、[操作] ウィンドウで [Deny File Name Extension] をクリックします。

    拡大

  5. [Deny File Name Extension] ダイアログ ボックスで、ブロックするファイル名拡張子を入力し、[OK] をクリックします。

    拡大

    たとえば、.inc というファイル名拡張子を持つファイルへのアクセスを防ぐには、ダイアログ ボックスに「inc」と入力します。

構成

属性

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

リストされていないファイル名拡張子を持つファイルを Web サーバーで処理するかどうかを指定します。この属性を true に設定すると、拒否するファイル名拡張子をすべてリストに含める必要があります。この属性を false に設定すると、許可するファイル名拡張子をすべてリストに含める必要があります。

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

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

子要素

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

ファイル名拡張子のコレクションにファイル名拡張子を追加します。
clear オプションの要素。

<fileExtensions> コレクションからファイル名拡張子へのすべての参照を削除します。
remove オプションの要素。

<fileExtensions> コレクションから 1 つのファイル名拡張子への参照を削除します。

構成サンプル

次の例の Web.config ファイルでは、2 つのオプションを構成します。まず、要求のフィルタリングを構成して、WebDAV からすべてのファイル名拡張子へのアクセスを許可します。また、IIS を構成して、.inc というファイル名拡張子を持つファイルへのアクセスを拒否します。このファイルは、アプリケーション用のインクルード ファイルとして使用される場合があります。

<configuration>
   <system.webServer>

      <security>
         <requestFiltering>
            <fileExtensions applyToWebDAV="false">
               <add fileExtension=".inc" allowed="false" />
            </fileExtensions>
         </requestFiltering>

      </security>
   </system.webServer>
</configuration>

サンプル コード

次のコード サンプルでは、Default Web Site 用のファイル名拡張子のリストにエントリを追加し、.inc という拡張子を持つすべてのファイルへのアクセスを拒否します。このファイルは、アプリケーション用のインクルード ファイルとして使用される場合があります。また、要求のフィルタリングを構成して、WebDAV から非表示のセグメントへのアクセスを許可します。

: 同じサンプルを使用してアクセスを許可するには、どちらの例でも、allowed 属性の値を false ではなく true に設定します。

AppCmd.exe

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

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"fileExtensions.[fileExtension='inc',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 fileExtensionsElement = requestFilteringSection.GetChildElement("fileExtensions");
         fileExtensionsElement["applyToWebDAV"] = false;
         ConfigurationElementCollection fileExtensionsCollection = fileExtensionsElement.GetCollection();

         ConfigurationElement addElement = fileExtensionsCollection.CreateElement("add");
         addElement["fileExtension"] = @"inc";
         addElement["allowed"] = false;
         fileExtensionsCollection.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 fileExtensionsElement As ConfigurationElement = requestFilteringSection.GetChildElement("fileExtensions")
      fileExtensionsElement("applyToWebDAV") = False
      Dim fileExtensionsCollection As ConfigurationElementCollection = fileExtensionsElement.GetCollection

      Dim addElement As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
      addElement("fileExtension") = "inc"
      addElement("allowed") = False
      fileExtensionsCollection.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 fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions");
fileExtensionsElement.Properties.Item("applyToWebDAV").Value = false;
var fileExtensionsCollection = fileExtensionsElement.Collection;

var addElement = fileExtensionsCollection.CreateNewElement("add");
addElement.Properties.Item("fileExtension").Value = "inc";
addElement.Properties.Item("allowed").Value = false;
fileExtensionsCollection.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 fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions")
fileExtensionsElement.Properties.Item("applyToWebDAV").Value = False
Set fileExtensionsCollection = fileExtensionsElement.Collection

Set addElement = fileExtensionsCollection.CreateNewElement("add")
addElement.Properties.Item("fileExtension").Value = "inc"
addElement.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement)

adminManager.CommitChanges()