Eu não consegui encontrar uma maneira de configurar o IIS, mas eu encontrei uma solução alternativa usando um manipulador genérico asp.net ( link , desça até a resposta por gvlahakis).
Primeiro, crie um manipulador genérico que retorne 404:
public class DirectoryBrowsingAttempt : IHttpHandler
{
public bool IsReusable {get {return true;}
public void ProcessRequest(HttpContext context) {context.Response.StatusCode = 404;}
}
Em segundo lugar, adicione tags ao web.config para apontar as tentativas de navegação no diretório para o manipulador acima, uma para cada pasta que você precisa proteger, nas seções httpHandlers e system.webServer. As tags abaixo protegem uma pasta chamada "js" fora da raiz.
<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>
Essa solução alternativa se comporta de maneira diferente no IIS 6 versus IIS 7. Por exemplo, eu protegi uma pasta que continha as imagens do site dessa maneira: O IIS 6 ainda entregava as imagens contidas nessa pasta em páginas da Web (o comportamento desejado, apenas deseja bloquear as tentativas de navegação no diretório); O IIS 7 os bloqueou.
Provavelmente existem maneiras de usar a guia "local" no web.config para permitir que as imagens sejam exibidas substituindo o manipulador de imagens padrão, mas não desejo ir tão longe na toca do coelho.