700 Stimmen

Wie lang darf eine Abfragezeichenfolge maximal sein?

Ist sie browserabhängig? Auch haben verschiedene Web-Stacks unterschiedliche Grenzen, wie viele Daten sie von der Anfrage erhalten können?

0 Stimmen

Sie können auch Folgendes prüfen stackoverflow.com/questions/417142/

0 Stimmen

Sie ist nur für GET-Anfragen gedacht! Die maximale Größe der POST-Anfragen (mit oder ohne multipart/form-data) ist hier unbekannt!

1173voto

Robert Cartaino Punkte 26456

RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1) besagt, dass es keine Begrenzung für die Länge eines Abfrage-Strings gibt (Abschnitt 3.2.1). RFC 3986 (Uniform Resource Identifier - URI) gibt ebenfalls an, dass es keine Begrenzung gibt, weist aber darauf hin, dass der Hostname aufgrund der DNS-Beschränkungen auf 255 Zeichen begrenzt ist (Abschnitt 2.3.3).

In den Spezifikationen ist zwar keine maximale Länge angegeben, doch werden praktische Grenzen durch Webbrowser und Serversoftware gesetzt. Auf der Grundlage von Recherchen, die leider nicht mehr auf der Originalseite verfügbar sind (sie führen zu einer dubios anmutenden Leihseite), die aber immer noch unter folgender Adresse zu finden sind Internet-Archiv von Boutell.com :

  • Microsoft Edge (Browser)
    Die Grenze scheint bei 81578 Zeichen zu liegen. Siehe Begrenzung der URL-Länge von Microsoft Edge

  • Chrom
    Er stoppt Anzeige die URL nach 64k Zeichen, kann aber mehr als 100k Zeichen liefern. Darüber hinaus wurden keine weiteren Tests durchgeführt.

  • Firefox (Browser)
    Nach 65.536 Zeichen zeigt die Adressleiste die URL in Windows Firefox 1.5.x nicht mehr an. Längere URLs funktionieren jedoch. Es wurden keine weiteren Tests nach 100.000 Zeichen durchgeführt.

  • Safari (Browser)
    Mindestens 80.000 Zeichen sind ausreichend. Weitere Tests wurden nicht durchgeführt.

  • Opera (Browser)
    Es müssen mindestens 190.000 Zeichen sein. Der Test wurde nach 190.000 Zeichen abgebrochen. Opera 9 für Windows zeigte auch bei 190.000 Zeichen noch eine vollständig editierbare, kopierbare und einfügbare URL in der Adressleiste an, selbst bei 190.000 Zeichen.

  • Microsoft Internet Explorer (Browser)
    Microsoft gibt an, dass die maximale Länge einer URL in Internet Explorer 2.083 Zeichen beträgt, wobei der Pfadteil der URL nicht mehr als 2.048 Zeichen enthalten darf. Versuche, längere URLs zu verwenden, führten zu einer deutlichen Fehlermeldung im Internet Explorer.

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

  • Microsoft Internet Information Server (Server)
    Die Standardgrenze liegt bei 16.384 Zeichen (ja, Microsofts Webserver akzeptiert längere URLs als Microsofts Webbrowser). Dies ist konfigurierbar.

  • Perl HTTP::Daemon (Server)
    Bis zu 8.000 Bytes sind möglich. Diejenigen, die Web-Anwendungsserver mit dem HTTP::Daemon-Modul von Perl erstellen, werden auf eine 16.384-Byte-Grenze für die kombinierte Größe aller HTTP-Anfrage-Header stoßen. Dazu gehören keine Formulardaten nach der POST-Methode, Datei-Uploads usw., wohl 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 lässt sich leicht aufheben. Suchen Sie nach allen Vorkommen von 16x1024 in Daemon.pm und ersetzen Sie sie durch einen größeren Wert. Dies erhöht natürlich die Anfälligkeit für Denial-of-Service-Angriffe.

10 Stimmen

Warum geben Sie nicht auch die Versionsnummer anstelle von "Microsoft Internet Explorer (Browser)" an?

7 Stimmen

Es scheint, dass die standardmäßige IIS-Grenze für den Query String deutlich unter 16.384 Zeichen liegt - hier als 2048 angegeben: iis.net/configreference/system.webserver/security/

0 Stimmen

58voto

TroySteven Punkte 4307

Empfohlene Sicherheit und Leistung Max: 2048 ZEICHEN

Obwohl RFC 2616 offiziell keinen Grenzwert vorgibt, wird in vielen Sicherheitsprotokollen und -empfehlungen darauf hingewiesen, dass maxQueryStrings auf einem Server auf eine Zeichenobergrenze von 1024 Zeichen festgelegt werden sollte. Die gesamte URL, einschließlich des Querystrings, sollte auf maximal 2048 Zeichen begrenzt werden. Damit soll die Schwachstelle Slow HTTP Request DDOS/DOS-Angriff auf einem Webserver verhindert werden. Dies wird in der Regel als Schwachstelle im Qualys Web Application Scanner und anderen Sicherheitsscannern angezeigt.

Bitte sehen Sie sich den folgenden Beispielcode für Windows IIS Server mit Web.config an:

<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.

Dies gilt nur für Server mit Windows-Betriebssystem, ich bin nicht sicher, ob es ein ähnliches Problem bei Apache oder anderen Servern gibt.

Hinweis: Die Begrenzung der Länge von Abfragezeichenfolgen und URLs kann den DDOS-Angriff "Langsame HTTP-Anfragen" nicht vollständig verhindern, aber es ist ein Schritt, den Sie unternehmen können, um ihn zu verhindern.

Hinzufügen eines Verweises, wie in den Kommentaren gefordert: https://www.raiseupwa.com/writing-tips/what-is-the-limit-of-query-string-in-asp-net/

9 Stimmen

Und jetzt habe ich einen Grund, warum ich den Backend-Ingenieuren sagen kann, dass wir keine Liste von einhundert 36-Zeichen-UUIDs in den queryParams einer GET-Anfrage akzeptieren werden. Vielen Dank!

1 Stimmen

@Mordred, wofür ist diese API gedacht, die 100 UUIDs in Abfrageparametern aufnimmt? Ist es eine Art Filtering UI?

2 Stimmen

@MaulikModi Ja. Es war im Wesentlichen eine "einfache" Backend-Abfrage von /get/records-by-id?ids=10000000001,1000000002,.... aber die IDs waren natürlich UUIDs.

1voto

Yogi Ghorecha Punkte 1256

2048 ZEICHEN

Obwohl Offiziell gibt es kein Limit angegeben von RFC 2616 viele Sicherheitsprotokolle und Empfehlungen besagen, dass maxQueryStrings auf einem Server sollte auf eine maximale Zeichenanzahl von 1024 . Während die gesamte URL, einschließlich des Querystrings, auf eine max von 2048 Zeichen. Blockquote

Eine URL wird als zu lang wenn sie länger ist als 100 Zeichen . Eine eine zu lange URL kann sowohl die Benutzerfreundlichkeit als auch Suchmaschine : Jeder potenzielle Nutzen, den Sie durch die Aufnahme von Schlüsselwörter wird verwässert werden, da es sich um einen so geringen Prozentsatz der Gesamtmenge handelt URL Text.

3 Stimmen

Könnten Sie bitte einen Hinweis auf die Empfehlungen zu den Sicherheitsprotokollen geben?

0voto

kdevine Punkte 83

Verschiedene Web-Stacks unterstützen unterschiedliche Längen von http-Requests. Ich weiß aus Erfahrung, dass die frühen Stacks von Safari nur 4000 Zeichen unterstützten und daher Schwierigkeiten bei der Verarbeitung von ASP.net-Seiten aufgrund des USER-STATE hatten. Das gilt sogar für POST, Sie müssen also den Browser überprüfen und sehen, wie lang der Stack ist. Ich denke, dass man auch bei neueren Browsern an eine Grenze stoßen kann. Ich kann mich nicht erinnern, aber einer von ihnen (IE6, glaube ich) hatte eine 16-Bit-Grenze, 32.768 oder so.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X