9. Security Considerations (Considérations de Sécurité)
Cette section vise à informer les développeurs, les fournisseurs d'informations et les utilisateurs des limitations de sécurité connues lors du déploiement de HTTP/1.1.
9.1. Establishing Authority (Établissement de l'Autorité)
HTTP repose sur le concept de composant authority (autorité) d'un URI, qui inclut l'adresse IP ou le nom d'hôte d'un serveur d'origine et le numéro de port TCP.
Le besoin d'un mécanisme fiable pour établir l'autorité du serveur au sein de HTTP a conduit au développement de HTTPS (HTTP sur TLS), tel que défini dans [RFC2818].
9.2. Risks of Intermediaries (Risques des Intermédiaires)
Par défaut, HTTP repose sur les attributs de sécurité du protocole de transport sous-jacent. En utilisant TLS, HTTP s'appuie sur TLS pour vérifier l'identité et fournir une protection de confidentialité et d'intégrité.
Cependant, TLS ne fournit une protection qu'au niveau de la couche transport. Les messages HTTP peuvent être lus ou modifiés par des intermédiaires qui ne sont pas des points d'extrémité sur le chemin de communication.
9.3. Attacks Based on File and Path Names (Attaques Basées sur les Noms de Fichiers et de Chemins)
Les serveurs d'origine utilisent souvent une structure de répertoires de système de fichiers hiérarchique pour stocker les représentations de ressources et reflètent cette hiérarchie dans l'espace URI qu'ils servent.
Les implémentations doivent faire attention à la manière dont elles mappent les URI au système de fichiers.
9.4. Attacks Based on Command, Code, or Query Injection (Attaques Basées sur l'Injection de Commandes, de Code ou de Requêtes)
Les serveurs d'origine utilisent fréquemment des paramètres fournis par le client (dans l'URI ou dans le corps du message), et ces paramètres sont parfois utilisés pour construire des requêtes, des commandes ou du code internes.
Les implémentations DOIVENT valider et assainir toutes les entrées.
9.5. Attacks via Protocol Element Length (Attaques via la Longueur des Éléments de Protocole)
Étant donné que HTTP utilise des délimiteurs basés sur la longueur pour marquer les limites de divers éléments de protocole, y compris la ligne de requête, la ligne de statut, les champs d'en-tête et le corps du message, les implémentations doivent empêcher un attaquant de consommer des ressources excessives en envoyant des éléments de protocole excessivement grands.
9.5.1. Request Smuggling (Contrebande de Requêtes)
Les attaques de contrebande de requêtes (request smuggling) exploitent les incohérences ou les ambiguïtés dans le tramage des messages HTTP.
Pour prévenir les attaques de contrebande de requêtes, les implémentations DOIVENT:
- Respecter strictement les règles de tramage des messages, en particulier les règles de détermination de la longueur du corps du message définies dans la Section 3.3.3
- Rejeter les messages contenant des informations de tramage incohérentes ou ambiguës
9.5.2. Response Splitting (Division de Réponse)
Les attaques de division de réponse (response splitting) exploitent une vulnérabilité où une application ne valide pas correctement les entrées lors de la génération de réponses HTTP.
Les implémentations DOIVENT valider toutes les entrées.
9.6. Disclosure of Sensitive Information in URIs (Divulgation d'Informations Sensibles dans les URI)
Les URI sont souvent enregistrés dans divers journaux système, historiques de navigateur et champs d'en-tête de référent. Par conséquent, les informations sensibles NE DEVRAIENT PAS être transmises dans les URI, en particulier dans les chaînes de requête.
9.7. Disclosure of Fragment after Redirects (Divulgation du Fragment après les Redirections)
Bien que les identificateurs de fragment ne soient pas envoyés aux serveurs, si un URI contient un fragment et que cet URI est redirigé vers un autre site, le fragment d'origine peut être exposé au nouveau site après la redirection.
9.8. Disclosure of Product Information (Divulgation d'Informations sur les Produits)
Les en-têtes Server et User-Agent contiennent généralement des informations sur le logiciel de l'expéditeur. Bien que ces informations puissent être utiles à des fins statistiques et pour identifier des problèmes d'interopérabilité, elles peuvent également être utilisées par un attaquant pour identifier des vulnérabilités logicielles.
9.9. Browser Fingerprinting (Empreinte Digitale du Navigateur)
L'empreinte digitale du navigateur (browser fingerprinting) est une technique par laquelle un site Web peut utiliser diverses informations (y compris les champs d'en-tête HTTP) pour identifier ou suivre de manière unique un navigateur, même sans utiliser de cookies ou d'autres mécanismes de suivi explicites.