开发者工具 · HTML WYSIWYG 编辑器
清理粘贴的 HTML:在到达您的 CMS 或电子邮件之前要删除哪些内容
· 工作原理
html 安全 文本清理
解释了 HTML 清理程序的作用,从列入白名单的标签和属性到删除的脚本和中和 URL,以及如何首先检查标记使清理程序规则更易于编写。
带有 onclick 的粘贴片段 — 打开时存在富文本输入中的隐藏风险
粘贴的锚点可以隐藏无辜目标旁边的点击。 ToolAcre 会小写每个属性名称,并仅保留为接受的元素显式列出的属性,因此即使更改其大小写,onclick 也会消失。删除报告会识别该事件处理程序,而不是默默地呈现未更改的源。
此边界在插入丰富粘贴之前、当源返回到可视模式时、在复制之前、在纯文本提取之前以及在构建预览文档时再次运行。重复减少了操作之间的意外绕过,但该项目仍然拒绝将手写分词器称为通用 XSS 过滤器。
为什么允许列表击败阻止列表 - 解释了命名允许的内容比尝试列出每个危险的构造更安全
允许列表首先命名允许的结构:段落、标题、语义内联元素、列表、描述列表、引用、类似代码的元素和锚点。未知的普通包装器在保留文本的同时丢失了其标签。脚本、样式、iframe、表单、SVG 或 MathML 等危险容器也会丢失其内容。
阻止列表需要预见到每一个危险或不受支持的结构。允许名单拒绝它不理解的内容。对于一个编辑器的受限输出来说,这是一个强有力的选择,但它仍然受到其分词器的限制。当涉及故意格式错误的输入时,浏览器 HTML5 错误恢复可以从较小的解析器生成不同的树。
标签、属性和 URL 方案 — 涵盖消毒剂过滤器的三层,以及每层的典型决策
过滤发生在三层。元素决定结构词汇。每个元素的属性只允许使用几个值,例如链接 href 和标题、引文引用、缩写标题以及有序列表开始和类型。然后,URL 检查对实体进行解码,从探测器中去除控件和空格,并检查生成的方案。
接受的方案包括 http、https、mailto、tel 和 ftp,以及没有明确方案的相关形式。 JavaScript、数据、文件、blob、vbscript 和有关示例在测试中被拒绝。幸存的链接会获得 rel 值,但这种添加并不能替代目标策略或链接审查。
样式:剥离、允许或重写 — 讨论内联样式处理以及为什么许多系统完全放弃它
样式属性被批量删除。该模块不会尝试解析声明、保留安全子集或重写设计令牌。该策略将复制的外观和基于 CSS 的请求表面一起删除。类、id 和数据属性也消失了,产生可移植但故意缺乏表达力的标记。
具有真正风格要求的系统需要不同的审核策略。在没有 CSS 清理程序的情况下将样式添加到此白名单会极大地改变其安全表面。当前的实现避免了这个问题,而不是声称解决了任意恶意片段的 CSS 安全问题。
工作示例:从 ToolAcre 记录的允许列表中派生规则,而不是特定于 Word 的固定装置
从 `<div class="WordSection"><p style="color:red" onclick="x()">Notice <strong>today</strong></p></div>` 开始。 div 被展开,类和样式无法生存,onclick 被删除,段落和强元素仍然存在。结果遵循通用策略,无需断言哪个应用程序生成了包装器。
添加 javascript href 和脚本块。锚点保留其可见文字,但丢失 href;脚本和正文消失。阅读报告的原因。此练习有助于定义服务器策略,但盲目复制 ToolAcre 的精确子集可能会忽略应用程序所需的元素或允许威胁模型禁止的 URL。
服务器端与客户端清理 — 解释了为什么服务器必须进行清理,即使浏览器已经这样做了
客户端过滤改进了本地起草,但不能被接收用户控制请求的服务器信任。攻击者可以绕过该页面,直接调用端点或利用解析器差异。服务器必须使用为其渲染上下文配置的维护的 HTML5 感知实现再次进行解析和清理。
输出编码也保持独立。用作文本的 HTML 必须由模板转义,而不是作为标记插入。故意呈现为 HTML 的片段需要在根据架构存储或输出之前进行清理。沙盒预览仅证明此预览不授予任何脚本、表单或同源访问权限。
该工具涵盖的内容 - 缩小编辑器输出过滤范围,而不是一般的恶意输入清理
ToolAcre 确实过滤了自己的输出表面,这与工作簿声称它只是一个检查工具的说法相反。准确的修正范围更窄:它不是针对任意恶意输入的通用 XSS 清理程序。消息来源明确指出了这一点,并记录了可能的解析器差异。
iframe 是 ToolAcre 内部渲染的深度防御。其空沙箱属性不允许脚本执行、表单提交或同源访问,并且引用者策略是无引用者。一旦 HTML 被复制到其他地方,该框架就不再保护它。出版安全属于接收系统。
要点:本地检查,服务器上消毒 - 总结工作流程以及编辑器如何帮助您了解消毒剂将面临的情况
在本地检查,在服务器上清理,并根据上下文进行渲染。这是三个不同的步骤。 ToolAcre 有助于揭示粘贴的包袱并提供保守的草稿子集,而删除通知可以在片段到达 CMS 或电子邮件工作流程之前使策略效果可见。
不要将成功的预览版作为针对 XSS 的证据进行营销。仅在一次性内容中使用测试有效负载,在调查重要时单独保存原始来源,并独立验证目的地消毒情况。安全声明应该准确地停止在代码和渲染边界停止的地方。