2013-09-16 4 views
5

Wenn IIS (6 oder 7) das Verzeichnis-Browsing deaktiviert ist, gibt IIS den Fehler "403 - Forbidden" zurück, wenn ein Versuch zum Durchsuchen eines Verzeichnisses erkannt wird (z. B. "http://mydomain.com/folder") .Konfigurieren von IIS, um 404 für Verzeichnissuchversuche zurückzugeben

Gibt es eine Möglichkeit, IIS zu konfigurieren, um einen "404 - Not Found" -Fehler anstelle von "403" für das Durchsuchen von Verzeichnissen zurückzugeben?

Dies ist eine Asp.net Webforms-Website.

Ein Sicherheits-Scan unserer Website hat festgestellt, dass die Rückgabe von "403" einer böswilligen Person helfen könnte, die unsere Website kartiert; Daran hatte ich vorher nicht gedacht, aber ich muss zugeben, dass es Sinn macht.

+0

ich bin nicht 100% sicher, aber ich denke das ist Off-Topic und gehört zu [SuperUser] (http://superuser.com/) – makim

+3

Ich würde ServerFault anstelle von SuperUser empfehlen, da es sich um eine Server-Konfigurationsfrage handelt –

+0

Ich habe die Frage auf ServerFault gestellt auf Ihren Vorschlag, danke, wusste nicht über diese Website. –

Antwort

1

Ich konnte keine Möglichkeit finden, IIS zu konfigurieren, aber ich fand eine Problemumgehung mit einem generischen ASP.net-Handler (http://forums.asp.net/p/1478217/3453189.aspx, scrollen Sie nach unten auf die Antwort von gvlahakis).

Erstellen Sie zunächst einen generischen Handler, 404 zurückzugibt:

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

Zweitens Tags Punkt Durchsuchen von Verzeichnissen auf den web.config hinzufügen versucht, den oben Handler, einer für jeden Ordner, den Sie schützen musst, in den Abschnitten httpHandlers und system.webServer. Die folgenden Tags schützen einen Ordner namens "js" vom Stammverzeichnis.

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

Diese Problemumgehung verhält sich anders in IIS 6 vs. IIS 7. Zum Beispiel habe ich einen Ordner geschützt, die die Website der Bilder auf diese Weise enthalten: IIS 6 noch die Bilder geliefert in diesem Ordner enthaltenen Web-Seiten (das gewünschte Verhalten, ich möchte nur Verzeichnis-Browsing-Versuche blockieren); IIS 7 blockierte sie.

Es gibt wahrscheinlich Möglichkeiten, die Registerkarte "Speicherort" in der Datei web.config zu verwenden, um Bilder durch Überschreiben der Standard-Bild-Handler zu ermöglichen, aber ich habe keine Lust, so weit in den Kaninchenbau gehen.

2

In IIS (7 und höher) gehen Sie auf Request Filtering, und es gibt eine Registerkarte namens Hidden Segments. Sie können nur den Namen des Verzeichnisses, das Sie versteckt werden soll hinzufügen, und es wird jetzt eine 404.

+1

Ich habe diesen Ansatz versucht, und es funktioniert. In meiner Situation wollte ich jedoch nur den Verzeichnissuchversuch blockieren, nicht die Anfragen nach Dateien innerhalb des Verzeichnisses. Dieser Ansatz hat dafür nicht funktioniert, da er auch alles innerhalb des Verzeichnisses blockiert. – witters

4

zurückkehren Wenn Sie die folgende Prozedur in web.config ASP.Net MVC hinzufügen verwenden

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

Diese Lösung funktionierte für mich in einer VS 2015 ASHX SPA-Lösung (d. H. Keine MVC-Lösung), ohne Code schreiben zu müssen oder die Verzeichnisnamen irgendwo aufzulisten. – user2728841

Verwandte Themen