Compartir a través de


Filtrado de solicitudes y reescritura de direcciones URL de IIS 7.0

por Ruslan Yakushev

IIS 7.0 y versiones posteriores incluyen un módulo de filtrado de solicitudes basado en el filtro ISAPI URLScan para IIS 6.0. El módulo le ayuda a reforzar la seguridad de los servidores web.

El equipo de IIS también ha publicado un módulo de reescritura de direcciones URL de complemento para IIS, que proporciona funcionalidad para la manipulación de direcciones URL basada en reglas. Aunque el propósito principal del módulo de reescritura de direcciones URL es reescribir las rutas de acceso de dirección URL de las solicitudes, el módulo de reescritura también se puede usar como una herramienta de cumplimiento de seguridad que ayuda a evitar el acceso al contenido del sitio web.

En este artículo, se explican las diferencias entre estos dos módulos y se proporcionan instrucciones sobre cuál elegir para reforzar la seguridad del servidor web.

Filtrado de solicitudes y reescritura de direcciones URL en la canalización de procesamiento de solicitudes de IIS

En primer lugar, es importante comprender cómo se conectan a la canalización de IIS el módulo de filtrado de solicitudes y el módulo de reescritura. En el diagrama siguiente, se muestra el orden relativo de estos dos módulos:

Diagram of the worker process to get from H T T P Request and H T T P Response.

El módulo de filtrado de solicitudes se ejecuta al principio de la canalización de procesamiento de solicitudes mediante el control del evento BeginRequest. El módulo evalúa los metadatos de la solicitud, como los encabezados, la cadena de consulta, la longitud del contenido, etc. para determinar si los metadatos de la solicitud coinciden con cualquier filtro existente. Si hay una coincidencia, el módulo genera una respuesta 404 (archivo no encontrado) y, a continuación, abre accesos directos al resto de la canalización de IIS.

Si el módulo de filtrado de solicitudes no ha filtrado la solicitud, la solicitud se pasa al siguiente módulo de la canalización de IIS, que podría ser el módulo de reescritura de direcciones URL. El módulo de reescritura de direcciones URL evalúa la solicitud con respecto a las reglas de reescritura. Si una regla da como resultado un redireccionamiento, o envía una respuesta personalizada o anula la solicitud, el módulo de reescritura genera una respuesta adecuada y, a continuación, abre accesos directos al resto de la canalización de IIS.

Observe que el módulo de filtrado de solicitudes se coloca antes del módulo de reescritura de direcciones URL. Esto se debe a que, en la arquitectura de IIS, el módulo de filtrado de solicitudes se considera un componente guardián que protege al servidor web de solicitudes malintencionadas. El módulo de reescritura de direcciones URL se considera un componente de manipulación de direcciones URL basado en servidor que trabaja con las direcciones URL que el módulo de filtrado de solicitudes ya ha filtrado. Puede pensar en la reescritura de direcciones URL como lógica de aplicación basada en servidor, similar a las aplicaciones de ASP.NET que también pueden realizar reescritura o redireccionamiento. El filtrado de solicitudes es una primera línea de defensa, mientras que la reescritura de direcciones URL puede ser una segunda barrera de seguridad más específica de la aplicación. Para obtener más información, consulte la entrada de blog "Interacción entre los módulos de reescritura de direcciones URL y filtrado de solicitudes para IIS7" en el sitio web de IIS.

Diferencias entre el filtrado de solicitudes y la reescritura de direcciones URL

Las diferencias conceptuales entre el filtrado de solicitudes y la reescritura de direcciones URL son las siguientes:

  • El filtrado de solicitudes está diseñado y optimizado exclusivamente para escenarios de seguridad.
  • La reescritura de direcciones URL se puede aplicar a un amplio conjunto de escenarios; los escenarios de seguridad son solo un subconjunto de estos.

Teniendo esto en cuenta, puede comparar las características de cada módulo que se pueden usar para escenarios de seguridad. Debe tener en cuenta las siguientes categorías:

  1. Criterios de filtrado. ¿Qué tipo de entrada se puede usar para tomar una decisión sobre bloquear una solicitud? Además, ¿qué condiciones se pueden usar para expresar la lógica de bloqueo de solicitudes?
  2. Acciones de bloqueo de solicitudes. ¿Qué acciones se pueden realizar cuando una solicitud cumple los criterios de filtrado?
  3. Impacto en el rendimiento. ¿Cómo podrían afectar el filtrado de solicitudes y la reescritura de direcciones URL al rendimiento del servidor web?

Criterios de filtrado

En la tabla siguiente, se enumeran los posibles criterios de filtrado y se explica cómo los admite cada módulo.

Criterio ¿Se admite en el módulo de filtrado de solicitudes? ¿Se admite en el módulo de reescritura de direcciones URL?
Examinar la ruta de acceso de la dirección URL solicitada Sí, mediante la búsqueda de substrings Sí, con regex y patrones comodín
Comprobar la longitud de la dirección URL No
Examinar cadena de consulta No Sí, con regex y patrones comodín
Comprobar la longitud de la cadena de consulta No
Comprobar los verbos HTTP
Comprobar la longitud del contenido de la solicitud No
Examinar encabezados HTTP No Sí, con regex y patrones comodín
Comprobar la longitud de los encabezados HTTP No
Examinar las variables de servidor No
Comprobar la dirección IP o el nombre de host del remitente No*

* El módulo de restricción de IP en IIS se puede usar para bloquear solicitudes desde direcciones IP y nombres de host específicos.

Acciones de bloqueo de solicitudes

El módulo de filtrado de solicitudes solo tiene una acción, que se realiza cuando una solicitud coincide con un criterio de filtrado. La acción es devolver el código de estado 404 (archivo no encontrado).

El módulo de reescritura de direcciones URL proporciona un conjunto mucho más amplio de opciones si se debe bloquear una solicitud, incluido lo siguiente:

  1. La dirección URL solicitada se puede reescribir en otra dirección URL. Por ejemplo, para evitar la vinculación activa de imágenes, puede volver a escribir una dirección URL en un archivo de imagen de marcador de posición para las solicitudes que proceden de un dominio de terceros.
  2. El cliente web se puede redirigir a una dirección URL diferente.
  3. Se puede enviar un código de estado HTTP de su elección al cliente web. Por ejemplo, puede enviar una respuesta de estado 401 (no autorizado) para las solicitudes que coincidan con criterios de filtrado específicos.
  4. La solicitud HTTP se puede anular quitando la conexión de socket. De este modo, el cliente web no obtiene ninguna información sobre el servidor web.

Impacto en el rendimiento

Ambos módulos se han implementado para tener el menor impacto posible en el rendimiento del servidor web IIS. Sin embargo, existen las siguientes diferencias importantes de rendimiento entre estos módulos:

  • El módulo de reescritura de direcciones URL se basa en gran medida en patrones de expresiones regulares. Evaluar expresiones regulares es una operación costosa y, si define muchas reglas complejas de reescritura, es posible que vea un impacto notable en el rendimiento del servidor web.
  • El módulo de filtrado de solicitudes no usa expresiones regulares ni ninguna otra coincidencia de patrones. Simplemente realiza una búsqueda de substrings, que puede tener un impacto significativamente menor en el rendimiento del servidor web.

Elección entre el filtrado de solicitudes y la reescritura de direcciones URL

Si va a elegir entre el filtrado de solicitudes y la reescritura de direcciones URL para reforzar la seguridad del servidor web, la regla general consiste en empezar con el filtrado de solicitudes. El filtrado de solicitudes está optimizado para escenarios de seguridad y su conjunto de características probablemente será suficiente para implementar los requisitos de seguridad. Si tiene un requisito que no pueda solucionar el módulo de filtrado de solicitudes, use el módulo de reescritura de direcciones URL para implementar ese requisito y deje el resto de las tareas de seguridad al módulo de filtrado de solicitudes. De este modo, se reduce el impacto en el rendimiento del módulo de reescritura de direcciones URL al tener una cantidad mínima de reglas de reescritura que el servidor debe procesar.