XSS baseado em DOM
Variante de XSS em que o exploit nunca toca o servidor — JavaScript vulnerável no cliente lê a entrada do usuário (hash da URL, location, localStorage) e a injeta via eval/innerHTML sem sanitização.
Clássico: document.getElementById('container').innerHTML = location.hash → a URL #<img onerror=alert(1) src=x> dispara o ataque. Defesas do lado do servidor (escapar na saída) NÃO ajudam — o exploit acontece inteiramente no cliente. Defesa: evitar innerHTML, usar textContent, escapar os dados do usuário antes de manipular o DOM, Trusted Types (API do Chrome que força segurança por construção). React e Vue reduzem o risco via auto-escape do JSX. Aplicações single-page têm superfície de XSS-DOM maior porque toda a renderização acontece no cliente. A CSP é a melhor mitigação: desligar o 'unsafe-eval' e só permitir scripts por nonce.