当前位置:首页 > 文章列表 > 文章 > 前端 > TrustedTypes详解:安全替代eval技巧

TrustedTypes详解:安全替代eval技巧

2026-05-10 12:34:03 0浏览 收藏
Trusted Types 并非简单的 eval 替换工具,而是一种通过强制类型检查在运行时主动拦截非法字符串执行的安全机制——它不审计逻辑、不执行注入,却能以“失败即发现”的方式倒逼团队重构执行模型:从精准识别所有危险调用点(包括间接入口),到启用 CSP 强制策略让未受控代码立即崩溃,再到分场景采用 import()、沙箱表达式解析、可信模板引擎等安全替代方案,最终建立命名策略驱动、ESLint 可验证、CSP 可监控的显式执行链路;这不仅切断了 XSS 根源,更将模糊的“代码安全”转化为可落地、可审计、可自动化的工程实践。

如何利用 Trusted Types 彻底消除旧项目中遗留的 eval 逻辑并实现安全的代码注入审计

Trusted Types 本身不执行代码注入,也不“审计”逻辑——它通过强制类型检查,在运行时拦截非法字符串执行行为。要消除旧项目中 eval 类逻辑并建立可审计的安全边界,关键不是替换一个函数,而是重构执行模型、切断危险入口,并让所有动态执行路径显式受控。

第一步:识别并标记所有 eval 类危险调用点

先不做修改,用自动化+人工方式定位全部风险源:

  • 全局搜索 eval(new Function(setTimeout(.*?,\s*['"]([^'"]+)['"]\s*\)setInterval(.*?,\s*['"]([^'"]+)['"]\s*\) 等模式
  • 检查第三方库是否内部使用(如旧版模板引擎、JSONP 回调处理器、低版本 lodash.template)
  • 特别注意间接调用:比如 location.href = 'javascript:...'iframe.src = 'data:text/html,...',这些同样被 require-trusted-types-for 'script' 拦截

第二步:用 Trusted Types 强制暴露问题,而非掩盖

在项目最顶部同步加载策略脚本,并配置 CSP 头启用强制模式。此时所有未走策略的 eval 调用会直接抛出 TypeError,前端立即白屏或报错——这是你想要的效果:

  • HTTP 响应头必须包含:Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default;
  • JS 策略注册写在 内首个