Pregunta

Tengo problemas al tratar de asegurar ELMAH. He seguido Phil Haacked de tutorial , con la única diferencia es 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 principal "/" Recibo la respuesta que "El recurso no puede ser encontrado.", Si quito el líder de todo "/" funciona muy bien a excepción de autenticación puede ser evitado si se añade un nombre de directorio frente a / admin / elmah.axd.

Por ejemplo, sin la líder "/"

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

¿Cómo puedo asegurarme de que ELMAH es segura mientras se mantiene la posibilidad de ver de forma remota el registro?

Gracias.

Nota a los demás:
A raíz de la respuesta de Alan debajo de los resultados en la siguiente.

www.mysite.com/admin/elmah.axd - desencadena la autenticación
www.mysite.com/admin/asdasdasd/elmah.axd - desencadena la autenticación
www.mysite.com/asdasdasd/admin/elmah.axd - El recurso no puede ser encontrado. (Exactamente lo que queríamos)

¿Fue útil?

Solución

He jugado un poco con el web.config y obtuve el siguiente para trabajar. Básicamente lugar de poner el HttpHandler elmah.axd en el system.web en general, añadirlo específicamente en el system.Web de su "admin" ubicación de la ruta.

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

Otros consejos

Si está utilizando ASP.NET MVC, vas a necesitar tener el motor de enrutamiento ignorar ese camino. Si desea mover ELMAH a /admin/elmah.axd, por ejemplo, se debe añadir lo siguiente a Global.asax.cs:

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

Después de haber pasado un tiempo tratando de conseguir que esto funcione mediante parches a los diversos bits de asesoramiento de cada una de las respuestas, he juntado una solución completa que debería funcionar para todas las versiones de IIS.

Esto es lo que tiene que 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 usted está usando Asp.Net MVC, añadir

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

en su método RegisterRoutes.

En IIS 7.5 servidor de Windows 2008, hay otra sección llamada system.webServer. Para que funcione ELMAH, esto se tuvo que añadir:

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

He intentado algunas variaciones, pero soy incapaz de utilizar la solución anterior para la prevención '/Blah/elmah.axd' de trabajo.

Cualquier sugerencia acerca de hacer el trabajo anterior solución de IIS 7.x?

Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top