
Tengo una regla de reescritura de URL para evitar el acceso al sitio desde cualquier URL excepto una lista definida. La regla regresa 400 Bad Request
si la URL no está en la lista.
<rule name="No unknown hosts" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^admin\.example\.com$" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="400" />
</rule>
Ejemplos de URL que intento bloquear son mail.example.com
o 102.15.63.233
. Esto funciona muy bienexceptocuando se agrega un segmento oculto a la URL, así mail.example.com/bin/
. Esto va a mi página de error 404 personalizada, que entre otras cosas parece una mierda porque todas las hojas de estilo y otros recursos (imágenes, etc.) no se resuelven ya que la URL está bloqueada y devuelve 400. Peor que eso, activa un error en los escaneos PCI DSS porque creen que estoy permitiendo la exploración de directorios.
He pasado casi todo el día haciendo búsquedas en Google de todas las formas posibles sin éxito. Oh, la razón para hacerlo de esta manera es para que no se pueda usar un encabezado HOST no válido para engañar a nuestro sitio y redirigirlo a un sitio malicioso (muchas otras reglas de reescritura dependen de esa funcionalidad). Espero que alguien aquí tenga una respuesta.