El cross-site scripting (XSS) es una vulnerabilidad web que permite inyectar JavaScript malicioso en páginas que ven otros usuarios, de modo que el script se ejecuta en sus navegadores con los privilegios del sitio.
Cómo funciona el XSS
El XSS ocurre cuando un sitio web inserta datos no confiables en una página sin codificarlos correctamente. El navegador no puede distinguir el código inyectado del JavaScript propio del sitio y lo ejecuta.
Hay tres tipos principales:
- XSS almacenado: la carga se guarda en el servidor, por ejemplo en un comentario o perfil, y afecta a cada visitante.
- XSS reflejado: la carga va en un enlace y se devuelve en la respuesta; la víctima debe abrir la URL manipulada.
- XSS basado en DOM: el fallo está en el código del lado del cliente que escribe datos inseguros en la página.
Por qué el XSS es peligroso
Un script inyectado puede:
- robar cookies de sesión y tokens;
- realizar acciones en nombre del usuario;
- mostrar formularios de acceso falsos;
- redirigir a sitios maliciosos o modificar el contenido.
En 2005, el gusano «Samy» usó XSS almacenado para añadir más de un millón de amigos en MySpace en un solo día. Hoy, el XSS en paneles de administración, webmail y plugins de CMS populares sigue siendo una vía habitual para secuestrar cuentas y sitios. El XSS y la inyección SQL pertenecen a la familia de vulnerabilidades de inyección.
Cómo prevenir el XSS
- Codifique la salida según el contexto (HTML, atributo, JavaScript, URL); los frameworks modernos lo hacen por defecto, así que no lo desactive.
- Sanee el HTML aportado por usuarios con una biblioteca probada como DOMPurify.
- Implemente una Content Security Policy (CSP) estricta que bloquee scripts en línea y de terceros.
- Marque las cookies de sesión como HttpOnly y Secure y mantenga actualizados los plugins del CMS.