DOM-based XSS
Разновидность XSS, где эксплойт вообще не доходит до сервера: уязвимый клиентский JavaScript берёт ввод (hash в URL, location, localStorage) и вставляет его в страницу без очистки.
Классический случай: document.getElementById('container').innerHTML = location.hash — и ссылка с #<img onerror=alert(1) src=x> срабатывает. Серверное экранирование не помогает: всё происходит в браузере. Защита: не использовать innerHTML, применять textContent, экранировать данные перед работой с DOM, включить Trusted Types (API Chrome, делающий небезопасные вставки невозможными по построению). У одностраничных приложений поверхность атаки шире — весь рендеринг клиентский. Лучшая мера — CSP без 'unsafe-eval' и с разрешением скриптов по nonce.