IIS を構成する方法が見つかりませんでしたが、asp.net 汎用ハンドラー ( http://forums.asp.net/p/1478217/3453189.aspx、gvlahakis による回答までスクロールダウン) を使用して回避策を見つけました。 .
まず、404 を返す汎用ハンドラーを作成します。
public class DirectoryBrowsingAttempt : IHttpHandler
{
public bool IsReusable {get {return true;}
public void ProcessRequest(HttpContext context) {context.Response.StatusCode = 404;}
}
次に、web.config にタグを追加して、httpHandlers セクションと system.webServer セクションの両方で、保護する必要があるフォルダーごとに 1 つずつ、上記のハンドラーにディレクトリ ブラウズ試行を指示します。以下のタグは、ルートから「js」という名前のフォルダーを保護します。
<httpHandlers>
<add verb="*" path="js/*" validate="false" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</httpHandlers>
<system.webServer>
<handlers>
<add name="NoAccess" verb="*" path="js/*" preCondition="integratedMode" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</handlers>
この回避策は、IIS 6 と IIS 7 では動作が異なります。たとえば、サイトの画像を含むフォルダーを次の方法で保護しました。IIS 6 は、このフォルダーに含まれる画像を Web ページに配信しました (望ましい動作、ディレクトリの閲覧試行をブロックします)。IIS 7 はそれらをブロックしました。
おそらく、web.config の「場所」タブを使用して、デフォルトの画像ハンドラーをオーバーライドすることで画像を提供できるようにする方法がありますが、私はそこまでウサギの穴に行きたくありません。