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

DOM-XSS

ПроверилCybersecurity entrepreneur & security researcher

Что такое DOM-XSS?

DOM-XSSРазновидность XSS, при которой внедрение и выполнение целиком происходят в браузере: клиентский JavaScript записывает недоверенные данные в приёмник без санитизации.


DOM-XSS (Type-0) — это уязвимость межсайтового скриптинга, коренная причина которой целиком находится в клиентском коде. Термин ввёл Амит Кляйн (Amit Klein) в 2005 году в статье «DOM Based Cross Site Scripting or XSS of the Third Kind». Доверенный источникlocation.hash, location.search, document.referrer, window.name, postMessage или localStorage — без санитизации попадает в опасный приёмник, такой как innerHTML, document.write, eval, setTimeout или jQuery.html(). Поскольку вредоносная полезная нагрузка часто едет во фрагменте URL (после #), она никогда не отправляется на сервер, что делает уязвимость невидимой для WAF, серверных журналов и большинства сканеров отражённого XSS.

Реальное воздействие велико: DOM-XSS многократно всплывал в рекламных и аналитических тегах, в обработчиках postMessage, доверяющих кросс-доменным данным, и в устаревших селекторах jQuery ($(location.hash), исправлено в CVE-2011-4969 для версий до 1.6.3). Собственный анализ Google показал, что большинство XSS в его продуктах были DOM-based, что послужило мотивом для создания Trusted Types. Меры защиты: предпочитайте инертные приёмники вроде textContent и setAttribute; санитизируйте с помощью DOMPurify или встроенного API Sanitizer; применяйте Trusted Types плюс строгую Content Security Policy; и запускайте инструменты taint-tracking, отслеживающие потоки от источника к приёмнику во время код-ревью.

flowchart LR
  A["Источник<br/>location.hash / postMessage"] --> B[Клиентский JS<br/>читает значение]
  B --> C{Санитизировано?}
  C -->|"textContent / DOMPurify"| D[Отрендерено безопасно]
  C -->|"сырая строка в innerHTML,<br/>eval, document.write"| E[Приёмник выполняет нагрузку]
  E --> F[Скрипт атакующего работает<br/>в сессии жертвы]
  F --> G[Кража cookie, захват<br/>аккаунта, кейлоггинг]
  E -.->|Trusted Types блокирует| H[TypeError, нет выполнения]

Примеры

  1. 01

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

  2. 02

    Маршрутизатор SPA использует window.location для вставки несанитизированного HTML в слот шаблона.

Частые вопросы

Что такое DOM-XSS?

Разновидность XSS, при которой внедрение и выполнение целиком происходят в браузере: клиентский JavaScript записывает недоверенные данные в приёмник без санитизации. Относится к категории Атаки и угрозы в кибербезопасности.

Что означает DOM-XSS?

Разновидность XSS, при которой внедрение и выполнение целиком происходят в браузере: клиентский JavaScript записывает недоверенные данные в приёмник без санитизации.

Как защититься от DOM-XSS?

Защита от DOM-XSS обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия DOM-XSS?

Распространённые альтернативные названия: XSS типа 0, Клиентский XSS.

Связанные термины

См. также