it-swarm.com.de

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

Ist es browserabhängig? Haben verschiedene Web-Stacks unterschiedliche Beschränkungen für die Datenmenge, die sie aus der Anforderung erhalten können?

509
Brian Sullivan

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

Während in den Spezifikationen keine maximale Länge angegeben ist, werden durch den Webbrowser und die Serversoftware praktische Grenzen gesetzt. Basierend auf den Untersuchungen von Boutell.com :

  • 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 enthält. Versuche, URLs zu verwenden, die länger sind, führten in Internet Explorer zu einer deutlichen Fehlermeldung.

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

  • Chrome
    Es stoppt das Anzeigen der URL nach 64.000 Zeichen, kann jedoch mehr als 100.000 Zeichen liefern. Darüber hinaus wurden keine weiteren Tests durchgeführt.

  • Firefox (Browser)
    Nach 65.536 Zeichen wird in der Adressleiste 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 werden funktionieren. Testen wurde darüber hinaus nicht versucht.

  • Opera (Browser)
    Mindestens 190.000 Zeichen werden 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 ein Server-URL-Längenlimit von ungefähr 4.000 Zeichen, woraufhin Apache den Fehler "413 Entity Too Large" erzeugt. Es wurde der aktuellste Apache-Build aus Red Hat Enterprise Linux 4 verwendet. In der offiziellen Apache-Dokumentation wird nur eine Beschränkung von 8.192 Byte für ein einzelnes Feld in einer Anforderung erwähnt.

  • Microsoft Internet Information Server (Server)
    Das Standardlimit beträgt 16.384 Zeichen (Ja, der Microsoft-Webserver akzeptiert längere URLs als der Microsoft-Webbrowser). Dies ist konfigurierbar.

  • Perl HTTP :: Daemon (Server)
    Bis zu 8.000 Bytes können verwendet werden. Für diejenigen, die Webanwendungsserver mit dem HTTP :: Daemon-Modul von Perl erstellen, gilt ein Limit von 16.384 Byte für die kombinierte Größe aller HTTP-Anforderungsheader. Dies beinhaltet nicht die Formulardaten der POST-Methode, das Hochladen von Dateien usw., sondern die URL. In der Praxis führte dies zu einem Fehler 413, 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 das Risiko von Denial-of-Service-Angriffen.

930
Robert Cartaino

Obwohl es offiziell keine Beschränkung gibt, wird in vielen Sicherheitskonfigurationsempfehlungen angegeben, dass maxQueryStrings auf einem Server auf eine maximale Zeichenbegrenzung von 1024 festgelegt werden sollte, während die gesamte URL einschließlich der Abfragezeichenfolge auf maximal 2048 Zeichen festgelegt werden sollte. Dies soll die Sicherheitsanfälligkeit "Slow HTTP Request" auf einem Webserver verhindern, um langsame DDOS-Angriffe auf den Qualys Web Application Scanner und andere Sicherheitsscanner zu verhindern.

Beachten Sie den folgenden Code für Windows IIS Server mit Web.config:

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

Verschiedene Web-Stacks unterstützen unterschiedliche Längen von http-Anfragen. Ich weiß aus Erfahrung, dass die frühen Stapel von Safari nur 4000 Zeichen unterstützten und daher aufgrund des USER-STATE Schwierigkeiten hatten, ASP.net-Seiten zu verarbeiten. Dies gilt sogar für den POST. Sie müssten also den Browser überprüfen und das Stack-Limit ermitteln. Ich denke, dass Sie auch in neueren Browsern ein Limit 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.

1
kdevine