net mvc asp .net asp.net web-config elmah

.net - mvc - elmah github



Asegurar Elmah en el sitio web de ASP.NET (4)

Después de haber pasado un rato tratando de hacer que esto funcione al unir los diversos consejos de cada una de las respuestas, he creado una solución completa que debería funcionar para todos los gustos de IIS.

Esto es lo que debe estar en cada una de sus secciones 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>

Y si está usando Asp.Net MVC, agregue

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

en su método RegisterRoutes.

Tengo problemas para intentar asegurar ELMAH. Seguí el tutorial Phil Haacked, con la única diferencia de que el proyecto de demostración es una aplicación web y mi proyecto es un sitio 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>

Con el "/" inicial, recibo la respuesta de que "No se puede encontrar el recurso". Si elimino el "/" inicial, todo funciona bien, excepto que la autenticación puede anularse al agregar un nombre de directorio delante de /admin/elmah.axd .

Por ejemplo, sin el "/" inicial

www.misitio.com/admin/elmah.axd - activa la autenticación
www.misitio.com/asdasdasd/admin/elmah.axd - no activa la autenticación y muestra ELMAH

¿Cómo puedo asegurarme de que ELMAH sea seguro mientras mantengo la capacidad de ver el registro de forma remota?

Gracias.

Nota para otros:
Siguiendo la respuesta de Alan a continuación se obtiene lo siguiente.

www.misitio.com/admin/elmah.axd - activa la autenticación
www.misitio.com/admin/asdasdasd/elmah.axd - activa la autenticación
www.misitio.com/asdasdasd/admin/elmah.axd - No se puede encontrar el recurso. (exactamente lo que queríamos)


En IIS 7.5 windows server 2008, hay otra sección llamada system.webServer. Para que ELMAH funcione, esto tuvo que ser agregado:

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

Intenté algunas variaciones, pero no puedo usar la solución anterior para evitar que ''/blah/elmah.axd'' funcione.

¿Alguna sugerencia para hacer que la solución anterior funcione para IIS 7.x?

Gracias.


Jugué con el web.config y obtuve lo siguiente para trabajar. Básicamente, en lugar de poner el elmah.axd HttpHandler en el sistema general.web, agrégalo específicamente en el sistema. Web de tu ubicación de ruta "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>


Si está utilizando ASP.NET MVC, necesitará que el motor de enrutamiento ignore esa ruta. Si desea mover elmah a /admin/elmah.axd, por ejemplo, debe agregar lo siguiente a Global.asax.cs:

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