web-dev-qa-db-fra.com

Quelle est la longueur maximale possible d'une chaîne de requête?

Est-ce que cela dépend du navigateur? De plus, les différentes piles Web ont-elles des limites différentes quant au volume de données qu'elles peuvent obtenir de la demande?

509
Brian Sullivan

RFC 2616 (Protocole de transfert hypertexte - HTTP/1.1) indique qu'il n'y a pas de limite à la longueur d'une chaîne de requête (section 3.2.1). RFC 3986 indique également qu'il n'y a pas de limite, mais indique que le nom d'hôte est limité à 255 caractères en raison de limitations DNS (section 2.3.3).

Bien que les spécifications ne spécifient aucune longueur maximale, des limites pratiques sont imposées par le navigateur Web et le logiciel serveur. Basé sur la recherche trouvée à Boutell.com :

  • Microsoft Internet Explorer (navigateur)
    Microsoft indique que la longueur maximale d'une URL dans Internet Explorer est de 2 083 caractères, dont 2 048 au maximum dans la partie chemin de l'URL. Les tentatives d'utilisation d'URL plus longues que celle-ci ont généré un message d'erreur clair dans Internet Explorer.

  • Microsoft Edge (navigateur)
    La limite semble se situer autour de 81578 caractères. Voir limitation de la longueur de Microsoft Edge

  • Chrome
    Il s’arrête d’afficher l’URL après 64 000 caractères, mais peut contenir plus de 100 000 caractères. Aucun autre test n'a été fait après cela.

  • Firefox (navigateur)
    Après 65 536 caractères, la barre d’emplacement n’affiche plus l’URL dans Windows Firefox 1.5.x. Cependant, des URL plus longues fonctionneront. Aucun autre test n'a été effectué après 100 000 caractères.

  • Safari (navigateur)
    Au moins 80 000 caractères fonctionneront. Les tests n'ont pas été essayés au-delà de cela.

  • Opera (navigateur)
    Au moins 190 000 caractères fonctionneront. Arrêt des tests après 190 000 caractères. Opera 9 pour Windows a continué d'afficher une URL entièrement éditable, copiable et empaquetable dans la barre d'adresse, même à 190 000 caractères.

  • Apache (Serveur)
    Les premières tentatives de mesure de la longueur maximale de l'URL dans les navigateurs Web sont passées à une limite d'environ 4 000 caractères, après quoi Apache génère une erreur "413 Entity Too Large". La version Apache actuelle mise à jour, trouvée dans Red Hat Enterprise Linux 4, a été utilisée. La documentation officielle d'Apache ne mentionne qu'une limite de 8 192 octets pour un champ individuel dans une demande.

  • Microsoft Internet Information Server (Serveur)
    La limite par défaut est de 16 384 caractères (oui, le serveur Web de Microsoft accepte des URL plus longues que le navigateur Web de Microsoft). Ceci est configurable.

  • Perl HTTP :: Daemon (Server)
    Jusqu'à 8 000 octets fonctionneront. Ceux qui construisent des serveurs d'applications Web avec le module HTTP :: Daemon de Perl rencontreront une limite de 16 384 octets pour la taille combinée de tous les en-têtes de requêtes HTTP. Cela n'inclut pas les données de formulaire POST-method, les téléchargements de fichiers, etc., mais inclut l'URL. En pratique, cela entraînait une erreur 413 lorsqu'une URL dépassait considérablement 8 000 caractères. Cette limitation peut être facilement supprimée. Recherchez toutes les occurrences de 16x1024 dans Daemon.pm et remplacez-les par une valeur plus grande. Bien sûr, cela augmente votre exposition aux attaques par déni de service.

930
Robert Cartaino

Bien qu'il n'y ait officiellement aucune limite, de nombreuses recommandations de configuration de sécurité indiquent que maxQueryStrings sur un serveur doit être défini sur une limite de caractères maximale de 1024, tandis que l'URL complète, y compris la chaîne de requête, doit être définie sur un maximum de 2048 caractères. Cela permet d'éviter la vulnérabilité de requête HTTP lente sur un serveur Web, ainsi que les attaques DDOS lentes apparaissant sur l'analyseur d'applications Web Qualys et d'autres analyseurs de sécurité.

Veuillez consulter le code ci-dessous pour Windows IIS Serveurs avec Web.config:

<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>
5
TroySteven

Différentes piles Web prennent en charge différentes longueurs de requêtes http. Je sais par expérience que les premières piles de Safari ne prenaient en charge que 4 000 caractères et rencontraient donc des difficultés pour gérer les pages ASP.net en raison de USER-STATE. Même pour POST, il vous faudra donc vérifier le navigateur et voir quelle est la limite de pile. Je pense que vous pouvez atteindre une limite même sur les nouveaux navigateurs. Je ne me souviens pas, mais l'un d'entre eux (IE6, je pense) avait une limite de 16 bits, 32 768 ou quelque chose du genre.

1
kdevine