43 votes

IIS6 vs. IIS7 et IIS7.5 : gestion des URL avec le signe plus (+) dans la base (pas dans la querystring)

Pour toute URL avec un signe plus (+) dans l'URL de base (pas dans la chaîne de requête), IIS7 et IIS7.5 (Windows Server 2008 et 2008 R2) ne semblent pas transmettre l'URL au gestionnaire par défaut d'une application ASP.NET. J'ai commencé à remarquer le problème avec un gestionnaire HTTP personnalisé sur *.html mais j'ai le même problème avec *.aspx. IIS6 (Server 2003) n'a aucun problème avec ces mêmes URL.

Pour reproduire le problème, dans un site ASP.NET, j'ai créé un ensemble de fichiers ASPX qui effectuaient un simple Response.Write avec différents noms :

  1. test_something.aspx
  2. test_some+thing.aspx
  3. test_some thing.aspx

Le troisième fichier était un test pour voir si IIS7[.5] traitait les symboles plus comme des espaces (comme il le ferait dans la chaîne de requête) ; cela ne semble pas être le cas. Avec tous ces fichiers en place, en accédant à http://somehost/test_some+thing.aspx ou http://somehost/test_some%2bthing.aspx, tout fonctionnera bien dans IIS6 mais renverra une erreur 404 dans IIS7/IIS7.5 avant d'atteindre un gestionnaire ASP.NET. Y a-t-il une configuration dans IIS7/7.5 que je n'ai pas vue pour lui permettre de "voir" un signe plus dans l'URL sans passer à côté de l'extension finale utilisée pour déterminer un gestionnaire HTTP ?

44voto

Adam Tuttle Points 7982

Après avoir cherché plus de combinaisons d'IIS et de plus, il semble que IIS7[.5] soit configuré pour rejeter par défaut les URL avec un signe plus par crainte de l'utilisation de ce caractère; ce symbole est toujours autorisé dans la chaîne de requête, cependant. La solution consiste à modifier l'attribut requestFiltering par défaut sur pour autoriser les caractères doublement encodés avec un appel en ligne de commande (modifiant finalement votre fichier web.config ASP.NET):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

Cela peut être un peu plus dangereux que ce que l'on préfère pour son site web, mais il ne semble pas y avoir de moyen d'être plus spécifique qu'une autorisation générale. Les avertissements concernaient les incohérences pouvant survenir lors de l'utilisation d'un signe plus dans une URL et de sa traduction typique en espace. Il semble que la seule autre alternative soit d'arrêter complètement d'utiliser des caractères plus dans vos URL.

10voto

Tim Points 31

Je viens de trouver comment créer une règle de réécriture pour convaincre IIS7 de mapper les signes plus à des espaces dans les URL. Dans mon cas, il s'agissait de maintenir le fonctionnement des signets ou des liens hypertexte hérités.

Voir mon article de blog pour plus de détails et références.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X