59 votes

La sécurisation de Elmah dans ASP.NET site web

Je vais avoir du mal à essayer de sécuriser ELMAH. J'ai suivi Phil Haacked du tutoriel, avec la seule différence étant le projet de démonstration est une application web et mon projet est un site web.

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

Avec le premier "/" je reçois la réponse que "La ressource ne peut pas être trouvé.", si je supprime le premier "/" tout fonctionne bien sauf l'authentification peut être contourné en ajoutant un nom de répertoire en face de /admin/elmah.axd.

Par exemple, sans le "/"

www.mysite.com/admin/elmah.axd - déclenche l'authentification
www.mysite.com/asdasdasd/admin/elmah.axd - ne pas déclencher l'authentification et affiche ELMAH

Comment puis-je m'assurer que ELMAH est sûre, tout en conservant la possibilité de visualiser à distance le journal?

Merci.

Note pour les autres:
La suite d'Alan réponse ci-dessous les résultats dans la suite.

www.mysite.com/admin/elmah.axd - déclenche l'authentification
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)

70voto

Alan Points 884

J'ai joué un peu avec le web.config et le suivant à travailler. Fondamentalement, au lieu de mettre le elmah.axd HttpHandler dans le système général.web, ajouter spécifiquement dans le système.web de votre "admin" chemin d'accès de l'emplacement.

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

25voto

aarondcoleman Points 416

Si vous utilisez ASP.NET MVC, vous allez avoir besoin d'avoir le moteur de routage ignorer ce chemin. Si vous souhaitez déplacer elmah à /admin/elmah.axd, par exemple, vous devez ajouter la ligne suivante à Global.asax.cs:

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

17voto

Samuel Jack Points 14556

Après avoir passé un certain temps à essayer d'obtenir ce travail en accumulant les différents bits du conseil de chacune des réponses, j'ai mis en place une solution complète qui devrait fonctionner pour toutes les saveurs de IIS.

Voici ce qui doit être en chacun de votre site web.sections de configuration:

<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 êtes en utilisant Asp.Net MVC, ajouter

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

dans votre RegisterRoutes méthode.

1voto

Dans IIS 7.5 de windows server 2008, il y a une autre section intitulée système.serveur web. Pour ELMAH de travail, cela a dû être ajoutée:

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

J'ai essayé quelques écarts, mais je ne peux pas utiliser la solution ci-dessus pour la prévention de la '/bla/elmah.axd " de travail.

Toutes les Suggestions sur la fabrication de la solution ci-dessus travail pour IIS 7.x?

Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X