Was ist die maximal mögliche Länge einer Abfragezeichenfolge?


558

Ist es browserabhängig? Haben verschiedene Webstacks unterschiedliche Grenzen für die Anzahl der Daten, die sie aus der Anforderung erhalten können?



Es ist nur für GET-Anfragen! Die maximale Größe der POST-Anfragen (mit oder ohne Multipart / Formulardaten) ist hier unbekannt!
Peter - Wiedereinstellung Monica

Antworten:


995

RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) gibt an, dass die Länge einer Abfragezeichenfolge unbegrenzt ist (Abschnitt 3.2.1). RFC 3986 (Uniform Resource Identifier - URI) gibt ebenfalls an, dass es keine Begrenzung gibt, gibt jedoch an, dass der Hostname aufgrund von DNS-Einschränkungen auf 255 Zeichen beschränkt ist (Abschnitt 2.3.3).

Während in den Spezifikationen keine maximale Länge angegeben ist, werden praktische Grenzen durch Webbrowser und Serversoftware festgelegt. Basierend auf Recherchen, die leider nicht mehr auf der ursprünglichen Website verfügbar sind (dies führt zu einer zwielichtig erscheinenden Leihseite ), die aber immer noch im Internetarchiv von Boutell.com zu finden sind :

  • Microsoft Internet Explorer (Browser)
    Microsoft gibt an, dass die maximale Länge einer URL in Internet Explorer 2.083 Zeichen beträgt, wobei der Pfadbereich der URL nicht mehr als 2.048 Zeichen enthält. Versuche, URLs länger als diese zu verwenden, führten in Internet Explorer zu einer eindeutigen Fehlermeldung.

  • Microsoft Edge (Browser)
    Das Limit scheint bei 81578 Zeichen zu liegen. Siehe URL-Längenbeschränkung von Microsoft Edge

  • Chrome
    Es stoppt die Anzeige der URL nach 64k Zeichen, kann aber mehr als 100k Zeichen dienen. Darüber hinaus wurden keine weiteren Tests durchgeführt.

  • Firefox (Browser)
    Nach 65.536 Zeichen wird in der Standortleiste die URL in Windows Firefox 1.5.x nicht mehr angezeigt. Längere URLs funktionieren jedoch. Nach 100.000 Zeichen wurden keine weiteren Tests durchgeführt.

  • Safari (Browser)
    Mindestens 80.000 Zeichen funktionieren. Darüber hinaus wurden keine Tests durchgeführt.

  • Opera (Browser)
    Mindestens 190.000 Zeichen funktionieren. Test nach 190.000 Zeichen abgebrochen. Opera 9 für Windows zeigte auch bei 190.000 Zeichen weiterhin eine vollständig bearbeitbare, kopierbare und einfügbare URL in der Adressleiste an.

  • Apache (Server)
    Frühe Versuche, die maximale URL-Länge in Webbrowsern zu messen, stießen auf eine Server-URL-Längenbeschränkung von ungefähr 4.000 Zeichen. Danach erzeugt Apache den Fehler "413 Entity Too Large". Es wurde der aktuelle Apache-Build in Red Hat Enterprise Linux 4 verwendet. In der offiziellen Apache-Dokumentation wird nur ein Limit von 8.192 Byte für ein einzelnes Feld in einer Anfrage erwähnt.

  • Microsoft Internet Information Server (Server)
    Die Standardbeschränkung beträgt 16.384 Zeichen (ja, der Webserver von Microsoft akzeptiert längere URLs als der Webbrowser von Microsoft). Dies ist konfigurierbar.

  • Perl HTTP :: Daemon (Server)
    Bis zu 8.000 Bytes funktionieren. Beim Erstellen von Webanwendungsservern mit dem HTTP :: Daemon-Modul von Perl wird die kombinierte Größe aller HTTP-Anforderungsheader auf 16.384 Byte begrenzt. Dies beinhaltet keine POST-Methoden-Formulardaten, Datei-Uploads usw., aber die URL. In der Praxis führte dies zu einem 413-Fehler, wenn eine URL deutlich länger als 8.000 Zeichen war. Diese Einschränkung kann leicht aufgehoben werden. Suchen Sie in Daemon.pm nach allen Vorkommen von 16x1024 und ersetzen Sie sie durch einen größeren Wert. Dies erhöht natürlich Ihr Risiko für Denial-of-Service-Angriffe.


8
Warum sagen Sie nicht auch die Versionsnummer anstelle von "Microsoft Internet Explorer (Browser)"?
LCJ

5
Es scheint, dass das Standard-IIS-Limit für die Abfragezeichenfolge
JTech


Ich denke, Sie haben einen Typ erstellt und die DNS-Einschränkungen werden in Abschnitt "3.2.2. Host" von RFC3986, nicht in 2.2.3 erläutert. "URI-Hersteller sollten Namen verwenden, die der DNS-Syntax entsprechen, auch wenn die Verwendung von DNS nicht sofort ersichtlich ist, und diese Namen auf maximal 255 Zeichen beschränken."
Craig Hicks

Ursachen java.lang.IllegalArgumentException: Request header is too largeauf dem Tomcat Spring Boot-Anwendungsserver.
Paramvir Singh Karwal

12

Obwohl offiziell in RFC 2616 kein Limit festgelegt ist, geben viele Sicherheitsprotokolle und Empfehlungen an, dass maxQueryStrings auf einem Server auf ein maximales Zeichenlimit von 1024 festgelegt werden sollte. Die gesamte URL, einschließlich des Querystrings, sollte auf ein Maximum von 2048 festgelegt werden Figuren. Dies soll die DDOS-Sicherheitsanfälligkeit für langsame HTTP-Anforderungen auf einem Webserver verhindern. Dies wird normalerweise als Sicherheitslücke im Qualys Web Application Scanner und anderen Sicherheitsscannern angezeigt.

Bitte beachten Sie den folgenden Beispielcode für Windows IIS-Server mit Web.config:

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

Dies würde auch auf Serverebene mit machine.config funktionieren.

Hinweis: Durch das Begrenzen der Länge von Abfragezeichenfolgen und URLs wird der DDOS-Angriff für langsame HTTP-Anforderungen möglicherweise nicht vollständig verhindert. Dies ist jedoch ein Schritt, den Sie ausführen können, um dies zu verhindern.


2
Und jetzt habe ich einen Grund, warum ich den Backend-Ingenieuren mitteilen kann, dass wir keine Liste mit einhundert UUIDs mit 36 ​​Zeichen in den queryParams einer GET-Anfrage akzeptieren. Vielen Dank!
Mordred

1

Unterschiedliche Webstacks unterstützen unterschiedliche Längen von http-Anforderungen. Ich weiß aus Erfahrung, dass die frühen Stapel von Safari nur 4000 Zeichen unterstützten und daher aufgrund des USER-STATE Schwierigkeiten hatten, mit ASP.net-Seiten umzugehen. Dies gilt sogar für POST. Sie müssten also den Browser überprüfen und feststellen, wie hoch das Stapellimit ist. Ich denke, dass Sie selbst bei neueren Browsern eine Grenze erreichen können. Ich kann mich nicht erinnern, aber einer von ihnen (IE6, glaube ich) hatte ein Limit von 16 Bit, 32.768 oder so.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.