Configurar el filtrado de solicitudes en IIS
de Keith Newman y Robert McMurray
En este documento se muestra cómo usar la configuración común de filtrado de solicitudes para mejorar la seguridad de su servidor web de IIS 8.
Los filtros de solicitudes restringen los tipos de solicitudes HTTP que procesa IIS 8. Al bloquear solicitudes HTTP concretas, los filtros de solicitudes ayudan a evitar que lleguen al servidor solicitudes que pueden ser perjudiciales. El módulo de filtro de solicitudes examina las solicitudes entrantes y rechaza las no deseadas a partir de reglas configuradas.
De forma predeterminada, IIS rechaza las solicitudes que acceden a segmentos de código críticos. También rechaza las solicitudes de algunas extensiones de nombre de archivo.
Puede configurar un filtro de solicitudes en el nivel de servidor y después invalidar la configuración en el nivel de sitio web.
Requisitos previos
Para obtener el máximo provecho de este tutorial, debe tener acceso a un ordenador que ejecute alguno de los siguientes sistemas operativos:
- Windows Server® 2012
- Windows® 8
Configuración general del filtrado de solicitudes
La configuración general incluye opciones como las siguientes:
- Si se va a permitir acceso a un archivo con una extensión que no figura en el filtro de solicitudes.
- Si se van a permitir solicitudes que usen verbos HTTP no registrados.
- Si se van a permitir solicitudes que contengan caracteres de bit más significativo (no ASCII).
- Si se van a permitir solicitudes con codificación doble.
- Longitud máxima del contenido solicitado.
- Longitud máxima de la dirección URL.
- Tamaño máximo de una cadena de consulta.
Para configurar opciones generales de filtrado de solicitudes mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- En el panel Acciones, haga clic en Modificar configuración de característica.
- En el cuadro de diálogo Modificar configuración del filtrado de solicitudes, modifique los valores según sea necesario y después haga clic en Aceptar.
Para configurar opciones generales de filtrado de solicitudes mediante la línea de comandos
Configuración de caracteres de bit más significativo
Para configurar caracteres de bit más significativo, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /allowhighbitcharacters:
true |
false
Por ejemplo, para permitir caracteres de bit más significativo, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /allowhighbitcharacters:true
Configuración del doble escape
Para configurar el doble escape, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /allowdoubleescaping:
true |
false
Por ejemplo, para habilitar el doble escape, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /allowdoubleescaping:true
Configuración de la longitud de contenido máxima permitida
Para configurar un valor para la longitud máxima permitida de contenido, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:
unidad
The variable requestlimits.maxallowedcontentlength:
unit especifica la longitud máxima de contenido.
Por ejemplo, para especificar 30000000 como la longitud máxima de contenido, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:30000000
Configuración de la longitud máxima permitida de una dirección URL
Para configurar un valor para la longitud máxima permitida de una dirección URL entrante, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /requestlimits.maxurl:
unidad
La variable requestlimits.maxurl:
unit especifica la longitud máxima de una dirección URL entrante.
Por ejemplo, para especificar 4096 como la longitud máxima de una dirección URL entrante, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /requestlimits.maxurl:4096
Configuración de la longitud máxima permitida de una cadena de consulta
Para configurar un valor para la longitud máxima permitida de una cadena de consulta entrante, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /requestlimits.maxquerystring:
unidad
La variable requestlimits.maxquertystring:
unit especifica la longitud máxima de una cadena de consulta entrante.
Por ejemplo, para especificar 2048 como la longitud máxima de una cadena de consulta entrante, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /requestlimits.maxquerystring:2048
Configuración del tamaño máximo de un encabezado HTTP
Para configurar un límite de tamaño de un encabezado HTTP concreto, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='
string',sizelimit='
unit']
La variable header=
string especifica el encabezado al que se aplica esta restricción. La variable sizelimit=
unit especifica el tamaño máximo de este encabezado.
Por ejemplo, para especificar un tamaño máximo de 2048 para encabezados que incluyen un valor de contoso.com, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='contoso.com',sizelimit='2048']
Extensiones de nombre de archivo
Para cada extensión de nombre de archivo que agregue, puede indicar si se permiten o se rechazan las solicitudes para ese tipo de archivo.
Para configurar extensiones de nombre de archivo mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Extensiones de nombre de archivo.
- En el panel Acciones, haga clic en Permitir extensión de nombre de archivo o Denegar extensión de nombre de archivo.
- Escriba la extensión de nombre de archivo en el cuadro y haga clic en Aceptar.
Para configurar extensiones de nombre de archivo mediante la línea de comandos
Configuración de extensiones de nombre de archivo que no figuran en la lista
Para configurar el modo en que IIS trata las extensiones de nombre de archivo no registradas, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:
true |
false
Por ejemplo, para denegar las extensiones de nombre de archivo no registradas, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:false
Configuración de solicitudes de WebDAV
Para indicar si las extensiones de nombre de archivo se aplican a las solicitudes de WebDAV, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:
true |
false
Por ejemplo, para configurar IIS de modo que las extensiones de nombre de archivo no se apliquen a las solicitudes de WebDAV, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:false
Adición o eliminación de una extensión de nombre de archivo
Para agregar una extensión de nombre de archivo, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='
string',allowed='true | false']
La variable fileextension
=string es la extensión de nombre de archivo que quiere permitir o denegar.
Por ejemplo, para agregar una regla que permita la extensión de nombre de archivo .xxx, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='.xxx',allowed='true']
Para quitar una regla para la extensión de nombre de archivo .xxx, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /-fileExtensions.[fileextension='.xxx']
Reglas de filtrado
IIS 8 permite definir reglas de filtrado personalizadas que se apliquen a las solicitudes entrantes. Mediante esta característica, puede definir filtros que hagan lo siguiente:
- Examinen la dirección URL de la solicitud.
- Examinen las cadenas de consulta incluidas en la dirección URL.
- Examinen campos de encabezado específicos.
- Definan las extensiones de nombre de archivo a las que se aplica el filtro.
- Definan las cadenas que se van a denegar.
Para configurar una regla de filtrado mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Reglas.
- En el panel Acciones, haga doble clic en Agregar regla de filtrado.
- En el cuadro Nombre, escriba un nombre para la regla de filtrado.
- Si quiere que se examine la dirección URL, active la casilla Examinar dirección URL.
- Si quiere que se examine la cadena de consulta, active la casilla Examinar cadena de consulta.
- En Examinar encabezados, especifique los encabezados que quiere examinar.
- En Se aplica a, especifique las extensiones de nombre de archivo a las que se aplica la regla.
- En Cadenas de denegación, escriba las cadenas que quiere denegar.
- Haga clic en OK.
Segmentos ocultos
Esta característica permite rechazar las solicitudes que contengan un segmento URL (por ejemplo, un nombre de carpeta).
Para configurar segmentos ocultos mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Segmentos ocultos.
- En el panel Acciones, haga clic en Agregar segmento oculto.
- Escriba el segmento URL en el cuadro y haga clic en Aceptar.
Para configurar segmentos ocultos mediante la línea de comandos
Configuración de solicitudes de WebDAV
Para indicar si los segmentos ocultos se aplican a las solicitudes de WebDAV, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:
true |
false
Por ejemplo, para configurar IIS de modo que los segmentos ocultos no se apliquen a las solicitudes de WebDAV, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:false
Adición de un segmento oculto
Para configurar un segmento oculto, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /+hiddensegments.[segment='
string']
La variable segment=
string especifica un segmento URL que está oculto.
Por ejemplo, para especificar que /bin es un segmento oculto, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /+hiddensegments.[segment='/bin']
Filtrado de direcciones URL
Puede configurar IIS para que acepte una dirección URL especificada. Además, puede configurarlo para que deniegue una secuencia de dirección URL especificada.
Para configurar el filtrado de direcciones URL mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Dirección URL.
- En el panel Acciones, seleccione Permitir dirección URL o Secuencia de denegación.
- Escriba la dirección URL o la secuencia de dirección URL en el cuadro y haga clic en Aceptar.
Para configurar el filtrado de direcciones URL mediante la línea de comandos
Para denegar una secuencia de dirección URL, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='
string']
La variable sequence=
string especifica una secuencia de caracteres de una dirección URL que IIS no debe analizar en ningún caso.
Por ejemplo, para especificar que IIS no analice nunca direcciones URL que contengan dos puntos, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='..']
Verbos HTTP
Puede definir una lista de verbos que IIS 8 acepte como parte de una solicitud. Cuando IIS rechaza una solicitud de acuerdo con esta característica, el código de error registrado es 404.6.
Para configurar verbos HTTP no registrados mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Verbos HTTP.
- En el panel Acciones, haga clic enPermitir verbo o Denegar verbo.
- Escriba el verbo en el cuadro y haga clic en Aceptar.
Para configurar verbos HTTP no registrados mediante la línea de comandos
Configuración de verbos HTTP que no figuran en la lista
Para configurar el modo en que IIS trata los verbos no registrados, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /verbs.allowunlisted:
true |
false
Por ejemplo, para denegar los verbos no registrados, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /verbs.allowunlisted:false
Configuración de solicitudes de WebDAV
Para indicar si el filtrado de verbos se aplica a las solicitudes de WebDAV, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /verbs.applyToWebDAV:
true |
false
Por ejemplo, para configurar IIS de modo que el filtrado de verbos no se aplique a las solicitudes de WebDAV, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /verbs.applyToWebDAV:false
Adición de un verbo HTTP
Para configurar los verbos que se van a filtrar, use la sintaxis siguiente:
appcmd set config /section:requestfiltering /+verbs.[verb='
string',allowed='
true |
false']
La variable verb=
string especifica el verbo al que se aplica esta restricción.
Por ejemplo, para especificar que se permite GET, escriba lo siguiente en el símbolo del sistema y presione ENTRAR:
appcmd set config /section:requestfiltering /+verbs.[verb='GET',allowed='true']
Límites de tamaño de encabezado
Puede limitar el tamaño de los encabezados de solicitudes HTTP para mejorar el rendimiento y la seguridad. Los encabezados son pares de nombre y valor que definen los parámetros operativos de una transacción HTTP.
Para configurar límites de tamaño de encabezado mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel para el que quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Encabezados y haga clic en Agregar encabezado.
- En el cuadro Encabezado, escriba el nombre del campo de encabezado.
- En el cuadro Límite de tamaño, escriba un entero positivo que represente el límite de tamaño de encabezado en bytes.
- Haga clic en OK.
Cadenas de consulta
Puede configurar IIS 8 para que permita o deniegue cadenas de consulta específicas incluidas en la dirección URL solicitada. Por ejemplo, si se encuentra una cadena de consulta denegada en la dirección URL de una solicitud, se denegará la solicitud.
Para configurar cadenas de consulta mediante la interfaz de usuario
- Abra el Administrador de IIS y seleccione el nivel donde quiere configurar el filtro de solicitudes.
- En Vista Características, haga doble clic en Filtrado de solicitudes.
- Seleccione la pestaña Cadenas de consulta y haga clic en Permitir cadena de consulta o Denegar cadena de consulta.
- En el cuadro Cadena de consulta, especifique la cadena de consulta.
- Haga clic en OK.
Registro de filtrado de solicitudes
Puede usar el registro de IIS para evaluar y optimizar la configuración del filtro de solicitudes.
En la tabla siguiente se muestran los códigos de error del filtro de solicitudes que aparecen en el registro:
Descripción del error | Código de estado |
---|---|
Filtrado de solicitudes: secuencia de direcciones URL denegada | 404,5 |
Filtrado de solicitudes: verbo denegado | 404,6 |
Filtrado de solicitudes: extensión de nombre de archivo denegada | 404,7 |
Filtrado de solicitudes: denegado por segmento oculto | 404,8 |
Filtrado de solicitudes: denegado porque la dirección URL duplicaba el escape | 404,11 |
Filtrado de solicitudes: denegado porque hay caracteres de bit más significativo | 404,12 |
Filtrado de solicitudes: denegado porque la dirección URL es demasiado larga | 404,14 |
Filtrado de solicitudes: denegado porque la cadena de consulta es demasiado larga | 404,15 |
Filtrado de solicitudes: denegado porque el contenido es demasiado grande | 413.1 |
Filtrado de solicitudes: denegado porque el encabezado de solicitud es demasiado largo | 431 |