Esto está bloqueado justo en el nivel del kernel IIS. Como prueba, saqué todos los módulos en IIS para que ni siquiera tuviera un controlador de página estático, y todavía mostraba el mensaje de error 400.
No creo que sea posible con IIS evitar eso. La configuración de registro que mencionó es para otros tipos de caracteres restringidos. No he visto una palanca para cambiar esa funcionalidad.
¿Cuál es tu objetivo es evitar eso? Abre más la superficie de ataque, y no puedo imaginar que un visitante legítimo se pierda como resultado de bloquear secuencias de escape de URL incompletas.
Actualización2:
Aquí hay tres excelentes enlaces sobre esto. Tanto Nazim Lala como Wade Hilmo del equipo de IIS han blogueado sobre esto debido a la discusión sobre su pregunta. También Scott Hanselman tiene una excelente publicación sobre la parte de la cadena de consulta dentro de .NET:
Actualización:
Verifiqué con un miembro del equipo de IIS para obtener una respuesta autorizada. Mencionó que el% se considera un carácter inseguro según RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Aquí está el texto relevante:
Inseguro:
Los personajes pueden ser inseguros por varias razones. El carácter de espacio no es seguro porque pueden desaparecer espacios significativos y pueden introducirse espacios insignificantes cuando las URL se transcriben o se componen o se someten al tratamiento de programas de procesamiento de texto. Los caracteres "<" y ">" no son seguros porque se usan como delimitadores alrededor de las URL en texto libre; la comilla ("" ") se usa para delimitar URL en algunos sistemas. El carácter" # "no es seguro y siempre debe codificarse porque se usa en la World Wide Web y en otros sistemas para delimitar una URL de un fragmento / ancla identificador que podría seguirlo. El carácter "%" no es seguro porque se usa para codificaciones de otros caracteres. Otros caracteres no son seguros porque se sabe que las puertas de enlace y otros agentes de transporte a veces modifican dichos caracteres. Estos caracteres son "{", "}", "|", "\", "^", "~", "[", "]" y "` ".
Todos los caracteres inseguros siempre deben estar codificados dentro de una URL. Por ejemplo, el carácter "#" debe codificarse dentro de las URL, incluso en sistemas que normalmente no manejan identificadores de fragmentos o de anclaje, de modo que si la URL se copia en otro sistema que los usa, no será necesario cambiar el Codificación de URL.
Entonces, IIS bloquea esto proactivamente en el nivel central, una medida de seguridad proactiva para minimizar su superficie de ataque.