
Eu tenho uma regra de reescrita de URL para impedir o acesso ao site a partir de qualquer URL, exceto uma lista definida. A regra retorna 400 Bad Request
se o URL não estiver na 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>
Exemplos de URLs que estou tentando bloquear são mail.example.com
ou 102.15.63.233
. Isso funciona muito bem,excetoquando um segmento oculto é anexado ao URL, assim mail.example.com/bin/
. Isso vai para minha página de erro 404 personalizada, que entre outras coisas parece uma porcaria porque todas as folhas de estilo e outros ativos (imagens, etc.) não serão resolvidos, pois o URL está bloqueado e retornando 400. Pior que isso, ele aciona um erro nas verificações do PCI DSS porque eles acham que estou permitindo a navegação no diretório.
Passei quase o dia inteiro fazendo pesquisas no Google de todas as maneiras possíveis, sem sucesso. Ah, a razão para fazer isso dessa maneira é que um cabeçalho HOST inválido não pode ser usado para enganar nosso site e redirecioná-lo para um site malicioso (muitas outras regras de reescrita dependem dessa funcionalidade). Espero que alguém aqui tenha uma resposta.