登录
首页 >  文章 >  前端

如何利用 Trusted Types 彻底重构 legacy 项目中的危险字符串连接与 DOM 注入

时间:2026-05-03 19:39:36 270浏览 收藏

怎么入门文章编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《如何利用 Trusted Types 彻底重构 legacy 项目中的危险字符串连接与 DOM 注入》,涉及到,有需要的可以收藏一下

Trusted Types 是需服务端、策略层、调用层三方对齐的强制拦截机制;必须配置 CSP 响应头(如 require-trusted-types-for 'script'),否则 JS 策略无效,且策略名须与 CSP 中声明的一致,否则抛 TypeError。

如何利用 Trusted Types 彻底重构 legacy 项目中的危险字符串连接与 DOM 注入

Trusted Types 不是“加个策略就能防 XSS”的补丁,它是一套必须服务端、策略层、调用层三方对齐的强制拦截机制;没配 CSP 响应头,JS 里写一百个 createPolicy 都不生效。

必须先配好 CSP 响应头,否则所有 JS 策略全是摆设

浏览器只在收到 Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default 这类响应头后,才会真正拦截 innerHTML = "..." 这类赋值。本地开发时可用 Content-Security-Policy-Report-Only 先收集违规日志,避免上线即崩。

注意两点:

  • default 是强制策略名——如果 JS 里调用 trustedTypes.createPolicy("my-policy", {}),但 CSP 头里写的是 trusted-types default,那创建会直接抛 TypeError,不是静默失败
  • 不支持 require-trusted-types-for 指令,必须走 HTTP 响应头,Nginx/Apache/CDN 都得配

识别并替换所有被忽略的危险 DOM 操作点

不止 innerHTML 受控,以下操作在开启 Trusted Types 后都会报错:

  • outerHTMLinsertAdjacentHTMLdocument.writedocument.writeln
  • DOMParser.parseFromString(html, "text/html") 返回的 Document 若含脚本,也触发校验