2013-09-16 10 views
5

W usługach IIS (6 lub 7), gdy przeglądanie katalogów jest wyłączone, usługa IIS zwraca błąd "403 - Zabroniony" po wykryciu próby przeglądania katalogu (np. "http://mydomain.com/folder") .Konfigurowanie usług IIS do zwracania 404 dla prób przeglądania katalogów

Czy istnieje sposób na skonfigurowanie usług IIS w celu zwrócenia błędu "404 - Nie znaleziono" zamiast "403" dla prób przeglądania katalogów?

To jest strona internetowa asp.net.

Skanowanie zabezpieczeń naszej witryny zwróciło uwagę, że zwrócenie "403" może pomóc złośliwemu użytkownikowi mapującemu naszą witrynę; wcześniej o tym nie myślałem, ale muszę przyznać, że ma to sens.

+0

jestem nie 100% shure, ale myślę, że to nie jest temat i należy do SuperUsera (http://superuser.com/) – makim

+3

Polecam ServerFault zamiast SuperUser, ponieważ jest to pytanie konfiguracyjne serwera –

+0

Pisałem pytanie na ServerFault według twojej sugestii, dzięki, nie wiedziałem o tej witrynie. –

Odpowiedz

1

Nie mogłem znaleźć sposobu na skonfigurowanie usług IIS, ale znalazłem obejście za pomocą ogólnego programu obsługi asp.net (http://forums.asp.net/p/1478217/3453189.aspx, przewiń w dół do odpowiedzi gvlahakisa).

Najpierw utwórz rodzajowe obsługi, która zwraca 404:

public class DirectoryBrowsingAttempt : IHttpHandler 
{ 
    public bool IsReusable {get {return true;} 
    public void ProcessRequest(HttpContext context) {context.Response.StatusCode = 404;} 
} 

drugie, dodać tagi do pliku web.config do punktu przeglądania katalogów próbuje powyższego przewodnika, po jednym dla każdego folderu, który trzeba chronić, w sekcjach httpHandlers i system.webServer. Poniższe tagi chronią folder o nazwie "js" od katalogu głównego.

<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> 

To rozwiązanie zachowuje się inaczej IIS 6 porównaniu IIS 7. Na przykład, chroniony folder obrazów zawartych w witrynie w ten sposób: IIS 6 nadal dostarczane obrazów znajdujących się w tym katalogu do strony internetowe (pożądane zachowanie, chcę po prostu zablokować próby przeglądania katalogu); Usługi IIS 7 je zablokowały.

Są prawdopodobnie sposoby użycia zakładki "lokalizacja" w pliku web.config, aby umożliwić wyświetlanie obrazów poprzez przesłonięcie domyślnego programu obsługi obrazu, ale nie mam ochoty iść tak daleko w dół króliczej dziury.

2

W IIS (7 i wyżej) przejdź do Żądaj filtrowania i istnieje zakładka o nazwie Ukryte segmenty. Można tylko dodać nazwę katalogu, który ma być ukryty i będzie teraz powrócić do 404.

+1

Próbowałem tego podejścia i działa. Jednak w mojej sytuacji chciałem tylko zablokować próbę przeglądania katalogu, a nie żądania plików w katalogu. Takie podejście nie zadziałało, ponieważ blokuje również wszystko w katalogu. – witters

4

Jeśli używasz ASP.Net MVC dodać następującą procedurę obsługi w pliku web.config

<system.webServer> 
    <handlers> 
    <add name="StopDirectoryBrowsing" path="*." resourceType="Directory" verb="*" 
     preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
<system.webServer> 
+0

To rozwiązanie sprawdziło się w rozwiązaniu VS 2015 ASHX SPA (tj. Nie rozwiązaniu MVC) bez konieczności pisania kodu lub wyświetlania nazw katalogów w dowolnym miejscu. – user2728841

Powiązane problemy