2009-08-07 10 views
57

Ich habe Probleme, ELMAH zu sichern. Ich habe Phil Haackeds tutorial verfolgt, mit dem einzigen Unterschied, dass das Demo-Projekt eine Web-Anwendung ist und mein Projekt eine Website ist.Sicherung Elmah in ASP.NET-Website

<add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 

    <location path="admin"> 
     <system.web> 
      <authorization> 
       <deny users="?"/> 
      </authorization> 
     </system.web> 
    </location> 

mit dem führenden „/“ erhalte ich die Antwort, dass „Die Ressource kann nicht gefunden werden.“, Wenn ich die führende „/“ alles außer Authentifizierung funktioniert gut entfernen können durch Anhängen eines Verzeichnisnamen vor umgangen werden von /admin/elmah.axd.

beispielsweise ohne das führende "/"

www.mysite.com/admin/elmah.axd - löst die Authentifizierungs
www.mysite.com/asdasdasd/admin/elmah.axd - nicht Trigger die Authentifizierung und Anzeigen ELMAH

Wie kann ich sicherstellen, dass ELMAH sicher ist, während die Fähigkeit zur Remoteansicht des Protokolls erhalten bleibt?

Danke.

Hinweis für andere:
Die folgende Antwort von Alan folgt.

www.mysite.com/admin/elmah.axd - löst den Authentifizierungs
www.mysite.com/admin/asdasdasd/elmah.axd - löst die Authentifizierung
www.mysite.com/asdasdasd/admin/ elmah.axd - Die Ressource kann nicht gefunden werden. (genau das, was wir wollten)

Antwort

70

Ich spielte mit der web.config herum und bekam folgendes zur Arbeit. Im Grunde, anstatt den elmah.axd HttpHandler in das allgemeine System.web zu setzen, fügen Sie ihn speziell in der system.web Ihres "admin" Pfades hinzu.

+8

Wenn Sie asp.net mvc verwenden, vergessen Sie nicht hinzuzufügen: routes.IgnoreRoute ("admin/elmah.axd/{* pathInfo}"); – santiagoIT

+0

Probleme über Sicherheit und *** ELMAH ***: http://geeks.ms/lruiz/2014/07/21/asp-net-revisa-la-configuracin-de-lemah-en-produccin/ –

1

In IIS 7.5 Windows Server 2008 gibt es einen anderen Abschnitt namens system.webServer. Damit ELMAH zu arbeiten, hatten diese hinzugefügt werden:

<system.webServer> 
    <handlers> 
    <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </handlers> 
</system.webServer> 

Ich habe ein paar Abweichungen versucht, aber ich bin nicht in der Lage, die oben genannte Lösung verwenden zur Verhinderung von ‚/blah/elmah.axd‘ aus Arbeiten.

Haben Sie Vorschläge, ob die obige Lösung für IIS 7.x funktioniert?

Danke.

+0

Sobald ich entfernt die elmah.axd aus meinem httpHandlers-Abschnitt von system.web und von Handlern unter system.webserver, bekomme ich jetzt 404 Fehler. Ich habe meinen Standort path = "admin" genau wie das, was Alan vorgeschlagen hat. Ausführen von IIS 7.5. – InvisibleMan1002

+0

@Dan Atkinson, das ist eine ungenaue Aussage. Wenn Sie in IIS 7+ hosten, müssen Sie HttpHandlers und HttpModules im Konfigurationsabschnitt 'system.webServer' registrieren. –

+0

@ChrisMarisic: Weißt du, du hast absolut recht! Ich habe meine frühere Aussage zurückgezogen (gelöscht). Danke, dass du mich korrigiert hast. :) –

25

Wenn Sie ASP.NET MVC verwenden, müssen Sie die Routing-Engine diesen Pfad ignorieren.

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}"); 
+0

hinzufügen Dieses löste mein Problem auf MVC, aber ich denke, dass die ursprüngliche Frage nicht über ASP.NET MVC war. – pauloya

+0

+1 für die Angabe von MVC-spezifischen Fix. Arbeitete für mich in MVC3. Ohne es @ Alans Antwort wird in MVC nicht funktionieren. – N30

+0

@Paulo, Die Frage gibt keine Webforms oder MVC an. ASP.NET ist die Grundlage für beide, also inklusive dieses extra Bit, das Sie für MVC benötigen. – aarondcoleman

17

Nachdem eine Weile lang versucht, dies durch das Patchen, die verschiedene Bits zur Arbeit zu kommen: Wenn Sie zum Beispiel bewegen Elmah /admin/elmah.axd wollen, sollten Sie die folgenden Funktionen Global.asax.cs hinzufügen Aus jeder Antwort habe ich eine komplette Lösung zusammengestellt, die für alle Varianten von IIS funktionieren sollte.

Hier ist, was in jedem Ihrer web.config Abschnitte sein muss:

<configuration> 
    <configSections> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> 
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> 
     <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" /> 
     <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 

    <elmah> 
    <!-- set allowRemoteAccess="0" for extra security --> 
    <security allowRemoteAccess="1"/> 
    </elmah> 

    <system.web> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> 
    </modules> 
    </system.webServer> 

    <location path="admin"> 
    <system.web> 
     <authorization> 
     <!--<allow users="Admin" /> --> 
     <deny users="?" /> 
     </authorization> 
     <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
    </system.web> 
    <system.webServer> 
     <handlers> 
     <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
     </handlers> 
    </system.webServer> 
    </location> 

</configuration> 

Und wenn Sie mit Asp.Net MVC, fügen Sie in Ihrer RegisterRoutes-Methode

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}"); 

hinzu.