La séparation de réponse HTTP est une forme de vulnérabilité pour les applications web, qui résulte de l'échec de l'application ou de son environnement à assainir les valeurs d'entrée. Elle peut être utilisée pour réaliser une attaque de cross-site scripting.
L'attaque consiste à ce que le serveur ajoute une séquence composée d'un retour chariot (Carriage Return CR, ASCII 0x0D) et d'une fin de ligne (Line Feed LF, ASCII 0x0A) suivie du contenu fourni par l'attaquant dans les en-têtes de la réponse HTTP. D'après le standard HTTP (), les en-têtes sont séparés par une séquence CRLF, et les en-têtes sont séparés du corps par deux de ces séquences. Ainsi si on ne supprime pas les CR ni les LF alors un attaquant peut déterminer les en-têtes de façon arbitraire, prendre le contrôle du corps, ou même séparer la réponse en deux réponses distinctes ou plus — d'où le nom de la technique.
Prévention
La solution classique consiste à traiter les chaînes de caractères avant leur insertion dans les en-têtes HTTP.
Typiquement on peut assainir les valeurs en convertissant leur type ou en utilisant des expressions régulières de d'assainissement. Bien que la séparation de réponse HTTP ne soit pas spécifique à PHP, l'interpréteur PHP contient des protections contre cette attaque depuis les versions 4.4.2 et 5.1.2PHP: PHP 5 ChangeLog.
Références
Catégorie:Sécurité du réseau informatique