Sécurisation Elmah sur le site ASP.NET
-
12-09-2019 - |
Question
Je ne parviens pas à essayer d'obtenir ELMAH. J'ai suivi de Phil Haacked
www.mysite.com/admin/elmah.axd - déclenche l'authentification Comment puis-je me assurer que ELMAH est sécurisé, tout en maintenant la possibilité de consulter le journal? Merci. Note aux autres: www.mysite.com/admin/elmah.axd - déclenche l'authentification
www.mysite.com/asdasdasd/admin/elmah.axd - ne déclenche pas l'authentification et affiche ELMAH
À la suite de la réponse Alan ci-dessous les résultats dans ce qui suit.
www.mysite.com/admin/asdasdasd/elmah.axd - déclenche l'authentification
www.mysite.com/asdasdasd/admin/elmah.axd - La ressource ne peut pas être trouvé. (Exactement ce que nous voulions)
La solution
J'ai joué avec le web.config et a obtenu ce qui suit pour travailler. Fondamentalement, au lieu de mettre la HttpHandler elmah.axd dans le system.web général, ajouter spécifiquement dans le system.web emplacement de votre chemin « admin ».
<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>
Autres conseils
Si vous utilisez ASP.NET MVC, vous allez avoir besoin d'avoir le moteur de routage ignorer ce chemin. Si vous voulez déplacer ELMAH à /admin/elmah.axd par exemple, vous devez ajouter ce qui suit à Global.asax.cs:
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
Après avoir passé un certain temps à essayer d'obtenir ce à travailler en recollant les différents bits de conseils de chacune des réponses, je l'ai mis en place une solution complète qui devrait fonctionner pour toutes les saveurs de services Internet.
Voici ce qui doit être dans chacune de vos sections web.config:
<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>
Et si vous utilisez Asp.Net MVC, ajoutez
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
dans votre méthode RegisterRoutes.
Dans IIS 7.5 Windows Server 2008, il est une autre section intitulée system.webServer. Pour ELMAH travailler, cela devait être ajouté:
<system.webServer>
<handlers>
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
</system.webServer>
Je l'ai essayé quelques écarts, mais je ne peux pas utiliser la solution ci-dessus pour la prévention '/Blah/elmah.axd' de travailler.
Toutes les suggestions sur faire le travail de solution ci-dessus pour 7.x IIS?
Merci.