asp.net mvc - ¿Cómo asegurar Elmah.axd?
asp.net-mvc security (7)
Estamos usando Elmah como nuestro sistema de registro de errores para una aplicación que pronto comenzará a producirse. Es extremadamente útil, pero si entra en producción de esta manera, cualquier persona en el mundo acceda al registro de errores porque todo lo que tiene que hacer es visitar ourdomain.com/elmah.axd
.
Esto obviamente no es ideal. Originalmente tenía la intención de restringir el acceso a esa página solo a direcciones IP dentro de nuestra compañía, pero ahora nuestros administradores de sistemas dicen que eso no es posible. Entonces, pregunto ¿cómo puedo evitar el acceso a este recurso?
Estamos ejecutando una aplicación ASP.NET MVC en IIS 6.
Aquí hay algunos enlaces útiles:
Implemente de forma segura ELMAH para el registro de errores Plug and Play
Protección de páginas de registro de errores
Descubrí que esto es más aceptable para las aplicaciones de MVC:
http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html
El escenario típico para proteger elmah.axd es permitir que solo un usuario autenticado pueda acceder a él. Pero si su sitio no usa ninguna autenticación, esto podría no ser aplicable.
Esto es lo que te recomendaría:
- Deshabilite completamente el controlador
elmah.axd
en su sitio principal - Configure
elmah
para escribir los registros en algún origen de datos compartido (como un archivo compartido, base de datos SQLite o incluso SQL Server) - Configure un segundo sitio en IIS, probablemente en otra red o servidor, que solo tenga elmah instalado y que apunte a esta misma fuente de datos compartidos. Ahora siempre usaría el segundo sitio para leer los registros. Obviamente, el segundo sitio solo sería accesible para usted.
Si decide usar SQL Server, incluso podría leer los registros de múltiples aplicaciones que se ejecutan en múltiples servidores web en una granja de servidores desde una sola aplicación interna a la que solo tiene acceso.
Puede apuntar el manejador de http de elmah a otra url (por ejemplo, "Secure / elmah.axd") en web.config. Puede asegurar la url como cualquier otra página de asp.net en la configuración web.
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="/Secure/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<location path="Secure" > <!-- secure the host.com/Secure path -->
<system.web>
<authorization>
<deny users="?" />
<!-- Or anything else... -->
</authorization>
</system.web>
</location>
Estamos utilizando con éxito este enfoque en IIS7 utilizando proveedores de membresía de directorio activo, y funciona muy bien. No estoy seguro si funciona en IIS6 sin embargo.
Si su intención es deshabilitar el acceso de usuarios remotos, simplemente cambie el valor de <security allowRemoteAccess="yes" />
a <security allowRemoteAccess="no" />
Si usa la membresía de ASP.NET, es bastante fácil restringir el acceso a el elmah.axd HttpHandler para usuarios anónimos y solo permite el acceso de usuarios en un grupo de "Administradores". Lo he hecho así:
<configuration>
...
<location path="elmah.axd">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
Cualquiera que haya iniciado sesión Y miembro de la función "Administradores" puede acceder a la página ahora.
Utilicé restricciones de IP de la configuración de IIS 7. De forma predeterminada, no puede simplemente aplicarlo en <location path="elmah.axd">
porque está bloqueado en el nivel de configuración principal. Como tal, creé una carpeta vacía "logs"
y aplique restricciones en IIS a esta carpeta, luego modifiqué la ruta de ubicación para el archivo elmah.axd
. ¡Eso es! Usted tiene acceso remoto a yourdomain.com/logs/elmah.axd
, pero solo desde direcciones IP específicas.