Trusted Types
¿Qué es Trusted Types?
Trusted TypesAPI del navegador y directiva CSP que previene el XSS basado en DOM exigiendo que los sumideros peligrosos del DOM reciban valores tipados y validados por una politica en lugar de cadenas en bruto.
Trusted Types es una defensa disenada por Google y estandarizada como Working Draft del W3C para eliminar de raiz el XSS basado en DOM. Cuando se habilita mediante las directivas CSP require-trusted-types-for 'script' y trusted-types, el navegador se niega a ejecutar los sumideros de inyeccion —innerHTML, outerHTML, document.write, eval, setTimeout con una cadena, script.src, iframe.srcdoc y docenas mas— siempre que reciban una cadena de texto plana. En su lugar, el codigo debe pasar objetos tipados (TrustedHTML, TrustedScript, TrustedScriptURL) generados por politicas nombradas y auditadas a traves de trustedTypes.createPolicy(...). Esto reduce los miles de sumideros inseguros de una base de codigo a un punado de funciones de politica revisables.
El mecanismo esta disponible en los navegadores basados en Chromium (Chrome y Edge desde la v83, mayo de 2020); las implementaciones de Firefox y Safari siguen en curso, por lo que se despliega como defensa en profundidad junto a una CSP estricta y no como control unico. Una politica especial llamada default intercepta cualquier cadena que se cuele, lo que permite a los equipos encaminarla a traves de un saneador: DOMPurify devuelve TrustedHTML de forma nativa, de modo que DOMPurify.sanitize(html, {RETURN_TRUSTED_TYPE: true}) satisface la aplicacion de la politica. Google atribuye a Trusted Types haber llevado el XSS de DOM practicamente a cero en productos como Search y Photos, ya que la mayoria de sus fallos historicos de XSS eran del lado del cliente. Despliegalo primero en modo Content-Security-Policy-Report-Only para detectar las infracciones antes de aplicarlo.
flowchart TD
A[Cadena no confiable<br/>location.hash, postMessage] --> B{Asignada a un<br/>sumidero del DOM? p. ej. innerHTML}
B -->|Trusted Types aplicado| C{El valor es un<br/>objeto TrustedHTML?}
C -->|Si, de politica auditada| D[El sumidero se ejecuta de forma segura]
C -->|No, cadena en bruto| E[El navegador lanza<br/>TypeError + informe CSP]
E --> F[politica default<br/>DOMPurify sanea]
F --> C
B -->|Sin Trusted Types| G[El sumidero ejecuta la cadena en bruto<br/>XSS basado en DOM]● Ejemplos
- 01
Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default;
- 02
Sustituir element.innerHTML = userInput por element.innerHTML = policy.createHTML(userInput).
● Preguntas frecuentes
¿Qué es Trusted Types?
API del navegador y directiva CSP que previene el XSS basado en DOM exigiendo que los sumideros peligrosos del DOM reciban valores tipados y validados por una politica en lugar de cadenas en bruto. Pertenece a la categoría de Seguridad de aplicaciones en ciberseguridad.
¿Qué significa Trusted Types?
API del navegador y directiva CSP que previene el XSS basado en DOM exigiendo que los sumideros peligrosos del DOM reciban valores tipados y validados por una politica en lugar de cadenas en bruto.
¿Cómo defenderse de Trusted Types?
Las defensas contra Trusted Types combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.