8
votes

Comment permet d'autoriser le traction dans les en-têtes d'accueil dans IIS

Je suis en train d'exécuter un site IIS 7.5 qui sert de contenu pour http://www.foo.com/

On m'a demandé de réaliser correctement http://www.foo.com./ (notez le point de fuite). Si vous frappez cette page maintenant, vous obtiendrez une erreur IIS:

mauvaise demande - nom d'hôte invalide

Erreur HTTP 400. Le nom d'hôte de la demande n'est pas valide.

Cela se produit même pour http://www.microsoft.com . i ont vu des sites des périodes de suivi avec succès (comme http://www.amazon.com./ ), mais il semble que la plupart d'entre eux utilisaient Apache, pas IIS.

J'ai ajouté un en-tête d'hôte dans IIS pour www.foo.com. qui est autorisé. Cependant, il ne vous laissera pas commencer le site. Il ne commencera pas et apparaît une boîte de message disant:

La valeur ne tombe pas dans la plage attendue.

Est-ce que quelqu'un sait comment servir des domaines avec des points de fuite dans IIS?


1 commentaires

Voici une autre question qui ressemble à la même chose. Et tristement pas de réponse: forums.iis.net/t/1170489.aspx


5 Réponses :


5
votes

Le point de trailing est une partie absolument juridique du nom d'hôte - c'est juste que c'est normalement invisible, car il est implicite dans DNS. Si le point de fuite est présent, il est appelé un nom de domaine «entièrement qualifié» (FQDN).

Notez que sur le fil DNS Toujours Offres dans les FQDNS.

§3.2.2 de RFC 3976 (le Définition pour l'URI Syntaxe) dit ceci (mon emphase):

Un hôte identifié par un nom enregistré est une séquence de caractères généralement destiné à la recherche dans un hôte ou un service défini localement Registre de noms, bien que la sémantique spécifique au schéma de l'URI peut nécessiter qu'un registre spécifique (ou une table de nom fixe) soit utilisé à la place. Les Le système de registre de nom le plus courant est le système de noms de domaine (DNS). Un nom enregistré destiné à rechercher dans le DNS utilise la syntaxe défini à la section 3.5 du [RFC1034] et de la section 2.1 de [RFC1123]. Tel Un nom consiste en une séquence d'étiquettes de domaine séparées par ".", chacun Étiquette de domaine Démarrage et fin avec un caractère alphanumérique et éventuellement aussi contenant des caractères "-". l'étiquette de domaine le plus à droite d'un nom de domaine entièrement qualifié dans DNS peut être suivi d'un seul "." et devrait être s'il est nécessaire de distinguer le Nom de domaine complet et certains domaines locaux.

Fichier un rapport de bogue avec MS.


4 commentaires

Je conviens que MS est malade ici, essayant simplement de savoir s'il pourrait y avoir une solution de contournement.


J'adore une solution de contournement aussi (juste comme avec des en-têtes d'hôtes sauvages), mais MS semble aimer ignorer ce genre de chose.


Le point de fuite n'est pas légal, par RFC 1718. Le "." est implicite, le nom d'hôte est implicitement un FQDN. L'URL aurait dû avoir échoué à la validation du navigateur, mais la plupart des navigateurs ne semblent pas le faire correctement.


WTH fait-il que l'IETF Tao a à voir avec les FQDNS? Au moins citer le bon RFC, et celui qui obsolète celui que j'ai référencé qui est le RFC définitif pour ce . (Astuce - Il n'y en a pas).



-1
votes

Je suis sûr qu'il y a un bug quelque part, mais la question est de savoir ce que le bug est.

Je pense que le bogue est que IIS vous permet de définir une en-tête d'hôte avec une trailing ".". L'en-tête d'accueil n'est pas la même chose qu'une FQDN. L'en-tête de l'hôte est destiné à faire correspondre la directive hôte dans la requête HTTP: xxx

Il est certainement valide dans l'URL saisi dans le navigateur, par exemple: http://www.doilookikeiCaTicare.com./default.aspx Comme cela est résolu de savoir où envoyer la demande.

Essayez de supprimer le point de fuite dans l'en-tête de l'hôte et cela devrait fonctionner correctement. Vous serez toujours en mesure de l'utiliser dans l'URL.

J'espère que cela aide

Jonathan


3 commentaires

Le nom est résolu, IIS gère votre demande, mais vous obtenez une demande de 400 invalide lorsque vous cliquez sur le lien que vous avez fourni. C'est exactement ce que je veux éviter. Je peux servir www.foo.com sans problème. Je ne peux pas voir www.foo.com.


Désolé, cette réponse est complètement fausse. Apparemment, IIS arrache l'URL de point de fuite avant de pouvoir être traitée n'importe où ailleurs. Si je coudl ajoutez une en-tête d'hôte supplémentaire avec le point, je voudrais ...


L'en-tête d'hôte est fabriqué par le navigateur, non par le serveur. L'erreur de serveur est le serveur rejetant l'en-tête d'hôte.



2
votes

C'est effectivement un bug dans IIS7 +, apparemment sans solution de contournement. Cela me concerne aussi bien. S'il vous plaît aller voter la demande de MS pour résoudre ce problème:

https://connect.microsoft.com/windowsserverfeedback/feedback/details/648242/Triting-dot-in-fqdn-caution-bad-request-Invalid-hostname


4 commentaires

Ce n'est pas un bogue, l'URL n'est pas valide. Un FQDN est littéralement écrit sous forme de chaîne terminée par points, cependant dans les URL, le FQDN est supposé (pas de domaines partiellement qualifiés et pas de point de fuite). En fait, votre navigateur ne doit pas l'envoyer.


@benc Vous avez tort sur les deux chefs - les noms de domaine non qualifiés et le point de fuite sont absolument autorisés dans une URI. Voir ma réponse mise à jour pour le chapitre et le verset. Veuillez inverser votre bowvote incorrect!


@benc Si une URL a été supposée être toujours implicite implicitement de spécifier une FQDN, des URL, telles que myinternallachine / foo ne fonctionnerait pas, car S'il a toujours été interprété comme une FQDN, un point de fuite serait appliqué avant de résoudre et "myinternallachine". N'est-ce pas typiquement résolvable dans DNS (pour le faire, afin que je puisse essentiellement ajouter ce qui est essentiellement un nouveau domaine "racine" de mon serveur DNS privé.


Et en plus: même s'il n'était pas "légal", j'ai des liens entrants qui sont formatés accidentellement de cette manière, et je voudrais les rediriger vers la bonne page. Actuellement, IIS Barfs trop tôt dans le processus et je n'ai pas la chance de "corriger" ces mauvaises URL via des redirections, etc.



-1
votes

Le navigateur est en faute. Il ne doit pas accepter un point de fuite dans la partie HostiPH (nom d'hôte) de l'URL.

Spécifiquement, pour FF et d'autres navigateurs à base de Mozilla:

bug 124565 - DNS: URL: utilisation de la FQDN dans "HostiP" < / p>

Dans une perspective de conception, la bibliothèque de réseau (Necko) devrait rejeter ceci, mais la Docshell (la partie conviviale) devrait probablement piéger une chaîne entrée par l'utilisateur AA et faire la fixation (supprimer le ".". ", et nettoyer l'hôte: en-tête).

Incidemment, Necko a également un problème où il est FQDN-paresseux, il ne colle pas de "". À la fin de la FQDN lorsqu'il envoie la demande au résolveur, ce qui rend chaque FQDN traitée par la logique PQDN du résolveur local.


1 commentaires

Je ne suis pas d'accord. Premièrement, un point de fuite est un élément juridique d'un nom d'hôte - regardez le RFC posté par @alnitak. Deuxièmement, ce n'est pas un problème de navigateur, mais plutôt un problème avec le serveur (IIS). Aucune demande avec un point de trailing réussira à un site Web hébergé IIS lié à un nom de domaine, quel que soit le navigateur utilisé.



0
votes

Ce numéro est discuté sur Microsoft Forums ici et est considéré comme un changement Dans le comportement entre IIS 6 et 7.

Ce site ici fournit un travail autour de réécrire l'URL sur le côté IIS.

Le changement de configuration requis pour divers serveurs Web est reproduit ci-dessous si le site ci-dessus s'en va. xxx


2 commentaires

J'ai essayé le contournement de l'IIS que vous avez fourni, mais j'ai toujours le même résultat: 400 mauvaise demande. Avez-vous réellement essayé la solution de contournement de le vérifier? Je ne pense pas que l'IIS transfère le contrôle des règles de réécriture avant de lancer une erreur 400.


Ce n'est pas une solution de contournement pour la question postée ici. C'est simplement un moyen de canoniser une telle demande (qui aurait pu ne se produire pas en premier lieu sur IIS 7.5)