Trusted Types 安全浏览 - DOM XSS防护演示
展示如何用默认策略将字符串转换为TrustedHTML,并观察禁止直接赋值的安全限制。
UD5工具箱
理解浏览器如何通过 Trusted Types 防止 DOM-based XSS 攻击
innerHTML 直接赋值):
policy.createHTML()):
const sanitizer = trustedTypes.createPolicy('my-policy', {
createHTML: (input) => {
// 使用 DOMPurify 或自定义清理逻辑
return DOMPurify.sanitize(input, {
ALLOWED_TAGS: ['b','i','em','strong','a','p','br','ul','ol','li','span','div','h1','h2','h3','h4','h5','h6','img','table','tr','td','th','thead','tbody'],
ALLOWED_ATTR: ['href','target','src','alt','class','id','style']
});
},
createScript: (input) => {
// 仅允许通过哈希验证的已知安全脚本
throw new Error('动态脚本被阻止');
},
createScriptURL: (input) => {
// 仅允许白名单域名
const url = new URL(input, location.origin);
if (['cdn.example.com','static.example.com'].includes(url.hostname)) {
return input;
}
throw new Error('不可信的脚本URL');
}
});
// ✅ 安全:通过策略创建 TrustedHTML el.innerHTML = sanitizer.createHTML(userInput); // ✅ 安全:使用 TrustedScriptURL scriptEl.src = sanitizer.createScriptURL(url); // ❌ 错误:直接赋值字符串会被浏览器拒绝 el.innerHTML = userInput; // TypeError!
Content-Security-Policy: trusted-types my-policy; Content-Security-Policy: require-trusted-types-for 'script';
Element.innerHTML 受保护Element.outerHTML 受保护Document.write / writeln 受保护DOMParser.parseFromString 受保护Range.createContextualFragment 受保护HTMLIFrameElement.srcdoc 受保护script.src 受保护script.textContent 受保护EmbedElement.src 受保护ObjectElement.data 受保护| 浏览器 | 版本 | 支持状态 |
|---|---|---|
| Chrome | 83+ | 完全支持 |
| Edge | 83+ | 完全支持 |
| Firefox | - | 开发中 |
| Safari | - | 暂不支持 |
| Opera | 69+ | 完全支持 |
innerHTML、document.write)只接受经过策略处理的可信对象,从而从根源上防止 DOM-based XSS 攻击。它要求开发者为所有注入点提供经过验证的"可信类型"数据,而非原始字符串。这是防御深度策略的关键一环,能阻止绝大多数基于 DOM 的跨站脚本攻击。
innerHTML、eval、document.write),不经过服务端。Trusted Types 主要针对 DOM XSS,通过锁定危险的 DOM sink 来阻止攻击。
require-trusted-types-for 'script' 和 trusted-types <policy-name>;2) 在 JavaScript 中创建 Trusted Types 策略,使用 trustedTypes.createPolicy() 定义清理规则。推荐搭配 DOMPurify 等库实现 createHTML 策略。
Content-Security-Policy-Report-Only。同时利用默认策略(default policy)作为过渡,逐步将代码中的字符串赋值迁移到策略调用。Chrome DevTools 也能帮助识别违规点。
<img src=x onerror=alert(1)> — 利用事件处理器<script>alert(1)</script> — 直接注入脚本标签<a href="javascript:alert(1)">click</a> — javascript: 协议<div onmouseover="..."> — 事件属性注入eval(userInput) — 代码执行函数createHTML 的实现。三者协同工作:CSP 启用 Trusted Types 强制执行 → Trusted Types 策略调用 DOMPurify 清理 → 安全内容注入 DOM,形成完整的防御链条。
展示如何用默认策略将字符串转换为TrustedHTML,并观察禁止直接赋值的安全限制。
使用新的Sanitizer API清理可能存在XSS风险的HTML字符串,并安全插入DOM。
观察目标节点的添加、删除、属性变更,日志可视化展示,调试动态DOM的利器。
可视化CSS box-shadow生成工具,拖拽调整阴影偏移、模糊、扩散、颜色,实时预览并生成代码。
在线Flexbox布局可视化生成器,直观调整主轴、交叉轴对齐、换行等属性,实时显示效果并输出CSS。
粘贴package.json内容,调用公开漏洞API(演示数据)检查依赖安全性,警示高危包。
使用范围请求安全地检查密码是否出现在已知数据泄露库中(不发送完整密码)。
使用浏览器SubtleCrypto API实现AES-GCM或AES-CBC加密解密,可设密码短语,全前端安全。
提供多组在各色盲类型下仍可区分的定性、连续配色方案,辅助图表设计。
为图片添加凸变或凹变扭曲,模拟超广角鱼眼镜头的夸张效果。
解析JSON Web Token,显示Header和Payload内容及签名算法,不验证签名,方便开发调试。
填入Payload及密钥,选择HS256/RS256算法生成JWT,并验证已签发Token的签名与过期时间。
在线XML格式化工具,支持XML缩进美化、语法高亮、树形结构查看及格式验证,完全在浏览器中处理。
在线JSON格式化与验证工具,支持JSON压缩美化、语法高亮、错误定位,浏览器本地处理保障数据安全。
在线Base64URL编码与解码,替换+/-为-/_并去除=填充,专为URL和JWT等场景优化。
显示若干张色盲测试图,用户识别数字,判断可能的色觉缺陷类型。
掷五个虚拟骰子,自动分类计算十六条得分项并高亮最佳填充策略,辅助桌游。
基于Canvas的在线绘图工具,提供画笔、橡皮擦、颜色选择、撤回等功能,自由涂鸦并保存作品。
输入 PlantUML 文本,编码为可嵌入图片的 URL 或解码已有的 PlantUML 链接查看源码。
输入域名,调用开放的WHOIS API获取注册信息,返回可用信息片段(需API兼容)。
填写标题、文本和URL,触发系统级分享菜单,测试Web Share API功能。
使用新的 Navigation API 拦截导航、管理历史条目,构建类 SPA 体验。
随机生成或手动添加种子点,实时绘制泰森多边形分割区域,可导出为SVG或图片。
掷5颗骰子,选择保留哪些,3次机会后填入计分表,自动加总。
在Canvas上手写签名,支持调节笔刷粗细和颜色,将签名保存为透明PNG图片。
选择结构类型(Article, Product等),填写字段生成JSON-LD代码,嵌入网页增强搜索结果。
在线条形码生成工具,支持Code128、EAN-13等多种格式,输入数字或字母生成矢量条形码,可保存为图片。
将非ASCII域名(如中文域名)转换为Punycode格式或还原,理解国际化域名编码机制。
播放标准音A后弹奏另一个音,用唱名(do re mi)或音名(CDE)识别音高。
随机提供一句引人入胜的故事开头,帮助作家克服空白页。