Sichern Elmah in ASP.NET-Website
-
12-09-2019 - |
Frage
Ich habe Probleme beim Versuch ELMAH zu sichern. Ich habe Phil Haacked der
www.mysite.com/admin/elmah.axd - löst die Authentifizierung Wie kann ich sicherstellen, dass ELMAH sicher ist, während die Fähigkeit beibehalten wird aus der Ferne das Protokoll anzeigen? Danke. Hinweis auf andere: www.mysite.com/admin/elmah.axd - löst die Authentifizierung
www.mysite.com/asdasdasd/admin/elmah.axd - nicht die Authentifizierung auslösen und zeigt ELMAH
Nach Alans Antwort unten Ergebnisse in den folgenden.
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)
Lösung
Ich spielte mit der web.config und bekam folgendes zu arbeiten. Im Grunde genommen, anstatt die elmah.axd Httphandler in der allgemeinen system.web setzen, fügen Sie es speziell in der system.web Ihrer „admin“ Pfad Lage.
<location path="admin">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
Andere Tipps
Wenn Sie ASP.NET MVC verwenden, Sie gehen zu müssen das Routing-Engine haben, diesen Weg zu ignorieren. Wenn Sie zum Beispiel bewegen Elmah /admin/elmah.axd wollen, sollten Sie Folgendes Global.asax.cs hinzufügen:
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
Nachdem eine Weile damit verbracht, dies zur Arbeit kommen Patchen die verschiedene Bits der Beratung von jedem der Antworten zusammen, habe ich zusammen eine Komplettlösung, die für alle Varianten von IIS funktionieren soll.
Hier ist, was in jedem Ihrer web.config Abschnitte werden 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 Asp.Net MVC verwenden, fügen
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
in Ihrer RegisterRoutes Methode.
In IIS 7.5 Windows Server 2008 gibt es einen weiteren 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 zu verwenden, um zu verhindern '/Blah/elmah.axd' von der Arbeit.
Irgendwelche Vorschläge auf, so dass die oben genannte Lösung Arbeit für IIS 7.x?
Danke.