非表示セグメント <hiddenSegments>

概要

<hiddenSegments> 要素には、IIS 7 がクライアントからアクセスできなくする特定の URL を識別する <add> 要素のコレクションが含まれています。

たとえば、ASP.NET コンテンツをホストしている Web サーバーで、IIS 7 は、Web.config、bin、App_Code などいくつかの ASP.NET 関連のパスをブロックします。これらの URL セグメントをブロックすると、攻撃者がこれらの URL を悪用して情報を得られる可能性が低くなります。

Note

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

HTTP サブ状態 説明
404.8 非表示の名前空間

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

互換性

バージョン メモ
IIS 10.0 <hiddenSegments> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <hiddenSegments> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 <hiddenSegments> 要素は IIS 8.0 では変更されませんでした。
IIS 7.5 <hiddenSegments> 要素は、IIS 7.5 では変更されませんでした。
IIS 7.0 <requestFiltering> コレクションの <hiddenSegments> 要素は IIS 7.0 で導入されました。
IIS 6.0 <hiddenSegments> 要素は、IIS 6.0 UrlScan [DenyUrlSequences] 機能を置き換えます。

段取り

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

Windows Server 2012 または Windows Server 2012 R2

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

Windows 8 または Windows 8.1

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

Windows Server 2008 または Windows Server 2008 R2

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

Windows Vista または Windows 7

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

操作方法

IIS 7.0 ユーザーの場合の注意: このセクションの一部の手順では、要求のフィルタリング用のユーザー インターフェイスを含む IIS 7.0 用 Microsoft 管理パックをインストールする必要がある場合があります。 IIS 7.0 用 Microsoft 管理パックをインストールするには、次の URL を参照してください。

非表示セグメントを追加する方法

  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. [ホーム] ウィンドウで、[要求のフィルタリング] をダブルクリックします。
    [既定の Web サイトホーム] ウィンドウを示すスクリーンショット。[要求のフィルター処理] が選択されています。

  4. [要求のフィルタリング] ウィンドウで、[非表示セグメント] タブを選択し、[操作] ウィンドウの [非表示セグメントの追加] をクリックします。
    [要求フィルター] ウィンドウを示すスクリーンショット。

  5. [非表示セグメントの追加] ダイアログ ボックスで、非表示にする相対パスを入力し、[OK] を選択します。
    [非表示セグメントの追加] ダイアログ ボックスを示すスクリーンショット。アンダースコアプライベートは、[非表示セグメント] テキスト ボックスに入力されます。

構成

属性

属性 説明
applyToWebDAV 省略可能な Boolean 属性です。

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

子要素

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

非表示セグメントのコレクションにセグメントを追加します。
clear 省略可能な要素です。

<hiddenSegments> コレクションからセグメントへのすべての参照を削除します。
remove 省略可能な要素です。

<hiddenSegments> コレクションからセグメントへの参照を削除します。

構成サンプル

次の Web.config ファイルの例では、"_private" フォルダーの要求へのアクセスを拒否するように IIS を構成し、非表示セグメントへの WebDAV アクセスを許可するように要求のフィルタリングを構成する 2 つのオプションを構成します。

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <hiddenSegments applyToWebDAV="false">
               <add segment="_private" />
            </hiddenSegments>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

サンプル コード

次のコード サンプルでは、[既定の Web サイト] 内の "_private" フォルダーに対する要求へのアクセスを拒否するように IIS を構成し、非表示セグメントへの WebDAV アクセスを許可するように要求のフィルタリングを構成する 2 つのオプションを構成します。

AppCmd.exe

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

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"hiddenSegments.[segment='_private']"

PowerShell

$hiddenSegments = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigElement -ChildElementName 'hiddenSegments'
Set-IISConfigAttributeValue -ConfigElement $hiddenSegments -AttributeName 'applyToWebDAV' -AttributeValue $false

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

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 hiddenSegmentsElement = requestFilteringSection.GetChildElement("hiddenSegments");
         hiddenSegmentsElement["applyToWebDAV"] = false;
         ConfigurationElementCollection hiddenSegmentsCollection = hiddenSegmentsElement.GetCollection();

         ConfigurationElement addElement = hiddenSegmentsCollection.CreateElement("add");
         addElement["segment"] = @"_private";
         hiddenSegmentsCollection.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 hiddenSegmentsElement As ConfigurationElement = requestFilteringSection.GetChildElement("hiddenSegments")
      hiddenSegmentsElement("applyToWebDAV") = False
      Dim hiddenSegmentsCollection As ConfigurationElementCollection = hiddenSegmentsElement.GetCollection

      Dim addElement As ConfigurationElement = hiddenSegmentsCollection.CreateElement("add")
      addElement("segment") = "_private"
      hiddenSegmentsCollection.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 hiddenSegmentsElement = requestFilteringSection.ChildElements.Item("hiddenSegments");
hiddenSegmentsElement.Properties.Item("applyToWebDAV").Value = false;

var hiddenSegmentsCollection = hiddenSegmentsElement.Collection;

var addElement = hiddenSegmentsCollection.CreateNewElement("add");
addElement.Properties.Item("segment").Value = "_private";
hiddenSegmentsCollection.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 hiddenSegmentsElement = requestFilteringSection.ChildElements.Item("hiddenSegments")
hiddenSegmentsElement.Properties.Item("applyToWebDAV").Value = False

Set hiddenSegmentsCollection = hiddenSegmentsElement.Collection

Set addElement = hiddenSegmentsCollection.CreateNewElement("add")
addElement.Properties.Item("segment").Value = "_private"
hiddenSegmentsCollection.AddElement(addElement)

adminManager.CommitChanges()