Trusted Types
Что такое Trusted Types?
Trusted TypesБраузерный API и CSP-директива, предотвращающие DOM-XSS: опасные DOM-приёмники обязаны получать типизированные, проверенные политикой значения вместо сырых строк.
Trusted Types — защита, разработанная Google и стандартизированная как рабочий черновик W3C (W3C Working Draft), нацеленная на устранение DOM-XSS в самом корне. При включении через CSP-директивы require-trusted-types-for 'script' и trusted-types браузер отказывается выполнять приёмники внедрения — innerHTML, outerHTML, document.write, eval, setTimeout со строкой, script.src, iframe.srcdoc и десятки других — всякий раз, когда им передаётся обычная строка. Вместо этого код должен передавать типизированные объекты (TrustedHTML, TrustedScript, TrustedScriptURL), создаваемые именованными, проверенными политиками через trustedTypes.createPolicy(...). Так тысячи небезопасных приёмников кодовой базы сводятся к горстке пригодных для ревью функций-политик.
Механизм поставляется в браузерах на Chromium (Chrome и Edge, начиная с версии 83, май 2020); реализации в Firefox и Safari пока в процессе разработки, поэтому он применяется как эшелонированная защита (defence-in-depth) наряду со строгой CSP, а не как единственная мера. Специальная политика с именем default перехватывает любую строку, которая проскользнула мимо, позволяя командам направить её через санитайзер — DOMPurify нативно возвращает TrustedHTML, поэтому DOMPurify.sanitize(html, {RETURN_TRUSTED_TYPE: true}) удовлетворяет принудительному режиму. Google приписывает Trusted Types снижение DOM-XSS практически до нуля в таких продуктах, как Search и Photos, поскольку большинство их исторических XSS-багов были клиентскими. Развёртывайте сначала в режиме Content-Security-Policy-Report-Only, чтобы отловить нарушения до включения принудительного режима.
flowchart TD
A[Недоверенная строка<br/>location.hash, postMessage] --> B{Присваивается<br/>DOM-приёмнику? напр. innerHTML}
B -->|Trusted Types принудительно| C{Значение —<br/>объект TrustedHTML?}
C -->|Да, из проверенной политики| D[Приёмник выполняется безопасно]
C -->|Нет, сырая строка| E[Браузер бросает<br/>TypeError + отчёт CSP]
E --> F[политика default<br/>DOMPurify санитизирует]
F --> C
B -->|Без Trusted Types| G[Приёмник выполняет сырую строку<br/>DOM-XSS]● Примеры
- 01
Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default;
- 02
Замена element.innerHTML = userInput на element.innerHTML = policy.createHTML(userInput).
● Частые вопросы
Что такое Trusted Types?
Браузерный API и CSP-директива, предотвращающие DOM-XSS: опасные DOM-приёмники обязаны получать типизированные, проверенные политикой значения вместо сырых строк. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Trusted Types?
Браузерный API и CSP-директива, предотвращающие DOM-XSS: опасные DOM-приёмники обязаны получать типизированные, проверенные политикой значения вместо сырых строк.
Как защититься от Trusted Types?
Защита от Trusted Types обычно сочетает технические меры и операционные практики, как описано в определении выше.