9. Security Considerations (Sicherheitsbetrachtungen)
Dieser Abschnitt zielt darauf ab, Entwickler, Informationsanbieter und Benutzer über bekannte Sicherheitsbeschränkungen bei der Bereitstellung von HTTP/1.1 zu informieren.
9.1. Establishing Authority (Einrichtung der Autorität)
HTTP stützt sich auf das Konzept der Authority-Komponente (Autorität) einer URI, die die IP-Adresse oder den Hostnamen eines Ursprungsservers und die TCP-Portnummer umfasst.
Der Bedarf an einem vertrauenswürdigen Mechanismus zur Einrichtung der Server-Autorität innerhalb von HTTP führte zur Entwicklung von HTTPS (HTTP über TLS), wie in [RFC2818] definiert.
9.2. Risks of Intermediaries (Risiken von Vermittlern)
Standardmäßig stützt sich HTTP auf die Sicherheitsattribute des zugrunde liegenden Transportprotokolls. Durch die Verwendung von TLS verlässt sich HTTP auf TLS, um die Identität zu überprüfen und Vertraulichkeits- und Integritätsschutz bereitzustellen.
TLS bietet jedoch nur Schutz auf der Transportschicht. HTTP-Nachrichten können von Vermittlern gelesen oder geändert werden, die keine Endpunkte auf dem Kommunikationspfad sind.
9.3. Attacks Based on File and Path Names (Angriffe auf Datei- und Pfadnamen)
Ursprungsserver verwenden oft eine hierarchische Dateisystemverzeichnisstruktur zum Speichern von Ressourcendarstellungen und spiegeln diese Hierarchie im von ihnen bereitgestellten URI-Raum wider.
Implementierungen müssen darauf achten, wie sie URIs auf das Dateisystem abbilden.
9.4. Attacks Based on Command, Code, or Query Injection (Angriffe basierend auf Befehls-, Code- oder Abfrage-Injektion)
Ursprungsserver verwenden häufig vom Client bereitgestellte Parameter (in der URI oder im Nachrichtenkörper), und diese Parameter werden manchmal verwendet, um interne Abfragen, Befehle oder Code zu konstruieren.
Implementierungen MÜSSEN alle Eingaben validieren und bereinigen.
9.5. Attacks via Protocol Element Length (Angriffe über Protokollelementlänge)
Da HTTP längenbasierte Begrenzer verwendet, um die Grenzen verschiedener Protokollelemente zu markieren, einschließlich Anfragezeile, Statuszeile, Header-Felder und Nachrichtenkörper, müssen Implementierungen verhindern, dass ein Angreifer übermäßige Ressourcen verbraucht, indem er übermäßig große Protokollelemente sendet.
9.5.1. Request Smuggling (Anfrage-Smuggling)
Request-Smuggling-Angriffe nutzen Inkonsistenzen oder Mehrdeutigkeiten im HTTP-Nachrichtenframing aus.
Um Request-Smuggling-Angriffe zu verhindern, MÜSSEN Implementierungen:
- Die Nachrichtenframing-Regeln strikt einhalten, insbesondere die in Section 3.3.3 definierten Regeln zur Bestimmung der Nachrichtenkörperlänge
- Nachrichten ablehnen, die inkonsistente oder mehrdeutige Framing-Informationen enthalten
9.5.2. Response Splitting (Antwort-Splitting)
Response-Splitting-Angriffe nutzen eine Schwachstelle aus, bei der eine Anwendung Eingaben beim Generieren von HTTP-Antworten nicht ordnungsgemäß validiert.
Implementierungen MÜSSEN alle Eingaben validieren.
9.6. Disclosure of Sensitive Information in URIs (Offenlegung sensibler Informationen in URIs)
URIs werden häufig in verschiedenen Systemprotokollen, Browserverlauf und Referer-Header-Feldern protokolliert. Daher SOLLTEN sensible Informationen NICHT in URIs übertragen werden, insbesondere nicht in Abfragezeichenfolgen.
9.7. Disclosure of Fragment after Redirects (Offenlegung von Fragment nach Weiterleitungen)
Obwohl Fragment-Identifikatoren nicht an Server gesendet werden, kann das ursprüngliche Fragment nach der Weiterleitung der neuen Site offengelegt werden, wenn eine URI ein Fragment enthält und diese URI zu einer anderen Site weitergeleitet wird.
9.8. Disclosure of Product Information (Offenlegung von Produktinformationen)
Die Server- und User-Agent-Header enthalten normalerweise Informationen über die Software des Absenders. Obwohl diese Informationen für statistische Zwecke und zur Identifizierung von Interoperabilitätsproblemen nützlich sein können, können sie auch von einem Angreifer verwendet werden, um Software-Schwachstellen zu identifizieren.
9.9. Browser Fingerprinting (Browser-Fingerprinting)
Browser-Fingerprinting ist eine Technik, bei der eine Website verschiedene Informationen (einschließlich HTTP-Header-Felder) verwendet, um einen Browser eindeutig zu identifizieren oder zu verfolgen, auch ohne Verwendung von Cookies oder anderen expliziten Tracking-Mechanismen.