Séparation de réponse HTTP
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 à purifier 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 (RFC 2616[1]), 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 purifier les valeurs en convertissant leur type ou en utilisant des expressions régulières de purification. 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.2[2].
Références
- (en) « Hypertext Transfer Protocol -- HTTP/1.1 », Request for comments no 2616, .
- PHP: PHP 5 ChangeLog