Ceci est bloqué directement au niveau du noyau IIS. En tant que test, j'ai retiré chaque module dans IIS afin qu'il n'ait même pas de gestionnaire de page statique et qu'il affiche toujours le message d'erreur 400.
Je ne pense pas qu'il soit possible avec IIS de contourner cela. Les paramètres de registre que vous avez mentionnés concernent d'autres types de caractères restreints. Je n'ai pas vu de levier pour changer cette fonctionnalité.
Quel est votre objectif d'éviter cela? Cela ouvre votre surface d'attaque plus large, et je ne peux pas imaginer qu'un visiteur légitime soit perdu à la suite du blocage de séquences d'échappement URL incomplètes.
Update2:
Voici trois excellents liens à ce sujet. Nazim Lala et Wade Hilmo de l'équipe IIS ont blogué à ce sujet en raison de la discussion autour de votre question. Scott Hanselman a également un excellent article sur la partie chaîne de requête dans .NET:
Mise à jour:
j'ai vérifié auprès d'un membre de l'équipe IIS pour obtenir une réponse faisant autorité. Il a mentionné que le% est considéré comme un caractère dangereux selon RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Voici le texte pertinent:
Peu sûr:
Les caractères peuvent être dangereux pour plusieurs raisons. Le caractère d'espace n'est pas sûr car des espaces importants peuvent disparaître et des espaces insignifiants peuvent être introduits lorsque les URL sont transcrites ou composées ou soumises au traitement de programmes de traitement de texte. Les caractères "<" et ">" ne sont pas sûrs car ils sont utilisés comme délimiteurs autour des URL dans le texte libre; le guillemet ("" ") est utilisé pour délimiter les URL dans certains systèmes. Le caractère" # "n'est pas sûr et doit toujours être codé car il est utilisé dans le World Wide Web et dans d'autres systèmes pour délimiter une URL à partir d'un fragment / ancre identifiant qui pourrait le suivre. Le caractère "%" n'est pas sûr car il est utilisé pour les encodages d'autres caractères. D'autres caractères ne sont pas sûrs car les passerelles et autres agents de transport sont connus pour parfois modifier ces caractères. Ces caractères sont "{", "}", "|", "\", "^", "~", "[", "]" et "` ".
Tous les caractères dangereux doivent toujours être codés dans une URL. Par exemple, le caractère "#" doit être codé dans les URL, même dans les systèmes qui ne traitent pas normalement les identifiants de fragment ou d'ancrage, de sorte que si l'URL est copiée dans un autre système qui les utilise, il ne sera pas nécessaire de modifier le Encodage URL.
IIS bloque donc de manière proactive ce problème au niveau principal, une mesure de sécurité proactive pour minimiser leur surface d'attaque.