Habilitar descarga desde directorios bin con IIS y ASP .NET

Cuando se instala ASP .NET en IIS, si tratamos de descargar ficheros alojados en nuestro servidor web dentro de directorios «/bin» nos encontramos con un error 404 (Not found), a pesar de que el fichero sí existe en nuestro servidor.

Esto ocurre porque ASP .NET, o más concretamente el filtro ISAPI de ASP .NET (aspnet_filter.dll), bloquea por defecto las peticiones que contengan un la cadena «/bin» en su URL independientemente del tipo de fichero o de su contenido. La razón de esto es prevenir posibles ataques a nuestro servidor.

Si podemos modificar la ubicación de estos ficheros para que no se encuentren dentro de un directorio bin debemos optar por esta opción para no exponer a nuestro servidor a posibles ataques y violaciones de seguridad.

Si por el contrario esos ficheros deben estar necesariamente dentro de un directorio bin, vamos a ver a continuación qué podemos hacer para resolver el problema en función de la configuración de nuestro servidor.

IIS 5.0 y cualquier versión de ASP .NET

En el caso de IIS 5.0 (que es el que tiene Windows XP por defecto) y cualquier versión de ASP .NET la solución es fácil. Lo único que ha hecho ASP .NET es quitar los permisos de lectura a los directorios bin de nuestro servidor para todas las peticiones entrantes. Para solucionar el problema basta con volver a conceder permisos de lectura al directorio bin en cuestión de la siguiente forma:

  1. Abrimos la consola de administración de IIS y seleccionamos el directorio «/bin» afectado.
  2. Hacemos click con el botón derecho y después pinchamos en propiedades.
  3. En la pestaña «Directory» marcamos permisos de lectura y aceptamos los cambios.

IIS 6.0 y ASP .NET 1.1

Cuando nuestro servidor es IIS 6.0 y utilizamos la versión 1.1 del Framework de .NET tampoco tendremos ningún problema para habilitar la descarga desde directorios bin.
De hecho, en mis pruebas ni siquiera se ha tenido que dar permiso de lectura al directorio bin, no ha hecho falta hacer absolutamente nada.

IIS 6.0 y ASP .NET 2.0

Sin embargo, si disponemos de la versión 6.0 de IIS y tenemos instalado ASP .NET 2.0, el método descrito anteriormente no sirve de nada. El filtro ISAPI de ASP .NET 2.0 bloquea completamente todas las peticiones realizadas a URLs con directorios bin a pesar de que se le hayan dado permisos de lectura desde la consola de administración de IIS.

Para solucionar el problema en esta ocasión podemos añadir una clave al registro que impida el filtrado de peticiones que incluyan «/bin» en la URL. El gran inconveniente es que esta forma la configuración afecta a los directorios bin de todo el servidor, no pudiéndose aplicar para las descargas desde directorios bin específicos.

Regedit y StopBinFiltering en ASP .NET

De cualquier manera, el proceso es el siguiente:

  1. Abrimos el editor de registro (regedit.exe) y buscamos la clave:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET.
  2. Añadimos un nuevo valor DWORD y lo llamamos StopBinFiltering.
  3. Para deshabilitar el filtro le damos el valor 1 y ya está todo listo. Ni siquiera hace falta reiniciar el servidor.
  4. Si queremos volver a habilitar el filtro sólo tenemos que darle el valor 0 a la clave StopBinFiltering.
Nuestra puntuación
Twittear
Compartir
Compartir
Pin