Acabamos de realizar algunas pruebas de lápiz en una aplicación web y el área identificada como Alto impacto y Probabilidad media fue:
Cross-Site scripting (reflected)
El ejemplo dado fue la capacidad de manipular una URL como:
www.domain.com/application/index.php/<IFRAME SRC=source.com onload="alert(document.cookie)"></IFRAME>
Todos los datos que se pasan realmente a la aplicación a través de formularios, GET, etc. se escapan y si ingresa el código iframe anterior en un formulario y lo envía o lo pasa como un parámetro GET, "no hace nada", pero cuando voy a este URL en un navegador, obtengo diferentes resultados dependiendo del navegador que va desde nada en Chrome e IE hasta Firefox mostrando la cookie en una ventana emergente.
Respuesta HTTP según lo solicitado:
GET /application/index.php/%3CBODY%20ONLOAD=alert%28%27XSS%27%29%3E HTTP/1.1
Host: "www.domain.com":http://www.domain.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Obviamente, no puedo confiar en que el usuario use el navegador correcto, así que, ¿cómo puedo mitigarlo? El código se pasa a la URL real y, por lo que puedo ver, se ejecuta antes de que se cargue la aplicación, por lo que no puedo ver ¿Cómo puedo evitarlo si se ejecuta en la URL o me equivoco?
No hay una razón genuina por la que alguien deba pasar ', ", < o > a través de la URL, ¿existen controles de nivel de servidor que pueden eliminar los caracteres desfavorables de la URL? / p>