Los ataques de división de la respuesta HTTP funcionan cuando los datos del usuario (incluidas las nuevas líneas) se pueden insertar en los encabezados HTTP.
Por ejemplo, tomemos esta respuesta:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 09 Jan 2013 23:11:55 GMT
Accept-Ranges: none
Content-Length: 1234
Connection: close
Content-Type: text/html; charset=UTF-8
Cookie: test=123&username=Polynomial
<html>
...
Ahora supongamos que puedo cambiar mi nombre de usuario arbitrariamente e incluir CRLF (nuevas líneas) en el campo. Entonces podría inyectar mi propio contenido en la página.
Por ejemplo, podría establecer mi nombre de usuario en Polynomial\r\n\r\n<script>alert(document.cookie)</script>
, lo que daría como resultado la siguiente respuesta HTTP:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 09 Jan 2013 23:11:55 GMT
Accept-Ranges: none
Content-Length: 1234
Connection: close
Content-Type: text/html; charset=UTF-8
Cookie: test=123&username=Polynomial
<script>alert(document.cookie)</script>
<html>
...
Como puede ver, el JavaScript se inyectó en la página. Esta es una forma de inyección XSS / DOM a través del ataque de división.
La inclusión de los datos del usuario en una solicitud no es tan mala, ya que el servidor debería tratar las solicitudes de los usuarios como no fiables de todos modos. Como tal, las solicitudes AJAX no deberían ser un problema. Esto se convierte en un problema aún menor si se considera el hecho de que la mayoría de los navegadores principales han deshabilitado o limitado el controlador javascript:
en la barra de URL, con el fin de limitar el potencial de ataques.