Trusted Types
O que é Trusted Types?
Trusted TypesAPI do navegador e diretiva CSP que evita XSS baseado em DOM exigindo que os sinks perigosos do DOM recebam valores tipados e validados por política, em vez de strings cruas.
Trusted Types é uma defesa concebida pela Google e padronizada como Working Draft do W3C para eliminar o XSS baseado em DOM na sua raiz. Quando ativada através das diretivas CSP require-trusted-types-for 'script' e trusted-types, o navegador recusa-se a executar os sinks de injeção — innerHTML, outerHTML, document.write, eval, setTimeout com uma string, script.src, iframe.srcdoc e dezenas de outros — sempre que estes recebem uma string simples. Em vez disso, o código deve passar objetos tipados (TrustedHTML, TrustedScript, TrustedScriptURL) criados por políticas nomeadas e auditadas através de trustedTypes.createPolicy(...). Isto reduz os milhares de sinks inseguros de uma base de código a um punhado de funções de política revisáveis.
O mecanismo está presente nos navegadores baseados em Chromium (Chrome e Edge desde a v83, maio de 2020); as implementações no Firefox e no Safari continuam em curso, por isso é implantado como defesa em profundidade em conjunto com uma CSP rigorosa, e não como único controlo. Uma política especial chamada default interceta qualquer string que escape, permitindo às equipas encaminhá-la através de um sanitizador — o DOMPurify devolve nativamente TrustedHTML, portanto DOMPurify.sanitize(html, {RETURN_TRUSTED_TYPE: true}) satisfaz a imposição. A Google atribui ao Trusted Types o mérito de ter reduzido o XSS de DOM a quase zero em produtos como o Search e o Photos, uma vez que a maioria dos seus historicos de bugs de XSS eram do lado do cliente. Comece por implantá-lo em modo Content-Security-Policy-Report-Only para detetar violações antes de impor.
flowchart TD
A[String não confiável<br/>location.hash, postMessage] --> B{Atribuída a um<br/>sink do DOM? ex. innerHTML}
B -->|Trusted Types imposto| C{O valor é um<br/>objeto TrustedHTML?}
C -->|Sim, de política auditada| D[Sink executa em segurança]
C -->|Não, string crua| E[Navegador lança<br/>TypeError + relatório CSP]
E --> F[política default<br/>DOMPurify sanitiza]
F --> C
B -->|Sem Trusted Types| G[Sink executa string crua<br/>XSS baseado em DOM]● Exemplos
- 01
Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default;
- 02
Substituir element.innerHTML = userInput por element.innerHTML = policy.createHTML(userInput).
● Perguntas frequentes
O que é Trusted Types?
API do navegador e diretiva CSP que evita XSS baseado em DOM exigindo que os sinks perigosos do DOM recebam valores tipados e validados por política, em vez de strings cruas. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Trusted Types?
API do navegador e diretiva CSP que evita XSS baseado em DOM exigindo que os sinks perigosos do DOM recebam valores tipados e validados por política, em vez de strings cruas.
Como se defender contra Trusted Types?
As defesas contra Trusted Types costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.