Que es un ataque XSS y como aprender a prevenirlo en PHP

WordPress Zero Day – Actualización urgente a 4.2.1
29 Septiembre, 2015

Que es un ataque XSS y como aprender a prevenirlo en PHP

Definición de Cross-Site-Scripting  (XSS)

El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y envió de datos sin validación alguna, aceptando el envió de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario.

¿A quien Afecta?

El Cross-Site-Scripting es una vulnerabilidad que puede causar un impacto tanto a una aplicación web como a usuarios que de manera inconsciente activen dicha secuencia de comandos.

Dicho código malicioso se compone de cadenas de datos cuyo contenido son scripts completos contenidos en enlaces o ejecutados desde formularios.

En caso de que sea ejecutado el mismo se ejecutara en el equipo del usuario con todos los privilegios permitidos por las políticas de seguridad configuradas en el navegador del usuario o del sitio visitado, pudiendo realizar acciones diversas como la captura de cookies de usuario o la activación de servicios y componentes del sistema operativo del usuario victima.

La mayor problemática es que estas cadenas de código se encuentran ocultas a la sombra de vínculos en donde el usuario normalmente no hace una vista del código de dicho enlace y lo ejecuta con una política de confianza total, dicha ejecución se realiza de una manera indirecta, ya sea por una activación vía hipervínculo o por la ejecución al momento de la carga de un sitio afectado por este tipo de ataque, el atacante no realiza su acción pensando en un usuario en especifico si no que actúa de manera de que afectan a cualquier usuario que inocentemente caiga en dicha trampa, las formas mas comunes de realizar dicha agresión es por medio de correos electrónicos, vínculos falsos o ataques directos a sitios no preparados para este tipo de ataque.

¿Cómo funciona un ataque XSS?

Veamos el siguiente código:

</p> <form action="post.php" method="post"><input name="comentario" type="text" value="" /><br /> <input name="enviar" type="submit" value="Enviar" /></form> <p>

Como ves, tenemos un formulario muy sencillo, para enviar un comentario de forma sencilla. Una vez que el formulario haya sido enviado, lo enviará al archivo post.php para procesarlo. Digamos que este archivo lo guarda en base de datos y luego lo pone en la página de la siguiente forma:

echo $_POST['comentario'];

Sin ningún tipo de filtrado, ahí sin más. ¿Qué pasaría si alguien enviara un comentario de este tipo?

javascript:alert(document.cookie);

El código JavaScript sería evaluado y, efectivamente, sería ejecutado. Este código no es nada malicioso, aparte de ser molesto. Imagina si el JavaScript lo que hace es robar el contenido de una cookie y enviarla a cualquier sitio.

Los ataques XSS se diferencian entre ataques persistentes y no persistentes.