Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 386

XSS Basado en DOM

Revisado porCybersecurity entrepreneur & security researcher

¿Qué es XSS Basado en DOM?

XSS Basado en DOMVariante de XSS donde la inyección y la ejecución ocurren totalmente en el navegador porque JavaScript del cliente escribe datos no confiables en un sink sin sanear.


El XSS basado en DOM (Tipo 0) es un fallo de cross-site scripting cuya causa raíz reside íntegramente en el código del lado del cliente. El término fue acuñado por Amit Klein en 2005 en el artículo "DOM Based Cross Site Scripting or XSS of the Third Kind." Una fuente de confianza —location.hash, location.search, document.referrer, window.name, postMessage o localStorage— fluye sin saneamiento hacia un sink peligroso como innerHTML, document.write, eval, setTimeout o jQuery.html(). Como la carga maliciosa suele viajar en el fragmento de la URL (después de #), nunca se envía al servidor, lo que hace que el fallo sea invisible para los WAF, los registros del servidor y la mayoría de los escáneres de XSS reflejado.

El impacto real es considerable: el XSS de DOM ha aparecido repetidamente en etiquetas de anuncios y analítica, en manejadores de postMessage que confían en datos de origen cruzado y en selectores heredados de jQuery ($(location.hash), corregido en CVE-2011-4969 para versiones anteriores a la 1.6.3). El propio análisis de Google descubrió que la mayoría del XSS en sus productos era basado en DOM, lo que motivó la creación de Trusted Types. Defensas: prefiere sinks inertes como textContent y setAttribute; sanea con DOMPurify o la API Sanitizer integrada; aplica Trusted Types junto a una Content Security Policy estricta; y ejecuta herramientas de rastreo de contaminación (taint-tracking) que sigan los flujos de fuente a sink durante la revisión de código.

flowchart LR
  A["Fuente<br/>location.hash / postMessage"] --> B[JS del cliente<br/>lee el valor]
  B --> C{Saneado?}
  C -->|"textContent / DOMPurify"| D[Renderizado de forma segura]
  C -->|"cadena en bruto a innerHTML,<br/>eval, document.write"| E[El sink ejecuta la carga]
  E --> F[El script del atacante se ejecuta<br/>en la sesion de la victima]
  F --> G[Robo de cookies, secuestro<br/>de cuenta, keylogging]
  E -.->|Trusted Types bloquea| H[TypeError, sin ejecucion]

Ejemplos

  1. 01

    document.getElementById('out').innerHTML = location.hash.substring(1);

  2. 02

    Un router de SPA usa window.location para renderizar HTML sin sanear en un hueco de plantilla.

Preguntas frecuentes

¿Qué es XSS Basado en DOM?

Variante de XSS donde la inyección y la ejecución ocurren totalmente en el navegador porque JavaScript del cliente escribe datos no confiables en un sink sin sanear. Pertenece a la categoría de Ataques y amenazas en ciberseguridad.

¿Qué significa XSS Basado en DOM?

Variante de XSS donde la inyección y la ejecución ocurren totalmente en el navegador porque JavaScript del cliente escribe datos no confiables en un sink sin sanear.

¿Cómo defenderse de XSS Basado en DOM?

Las defensas contra XSS Basado en DOM combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.

¿Cuáles son otros nombres para XSS Basado en DOM?

Nombres alternativos comunes: XSS Tipo 0, XSS de cliente.

Términos relacionados

Véase también