Skip to content

Zephyr v2.3.2

Choose a tag to compare

@github-actions github-actions released this 25 May 19:42
cb25908

Zephyr v2.3.2 — XSS 防护增强 & UI 修复

新增 html/safeHtml 安全模板标签和 eslint-plugin-no-unsanitized 静态检测;sanitizeHtml 改用 <template> 解析并新增 STRIP_CONTENT_TAGS 防内容泄漏;修复 UI 缩放时模糊溢出、关闭按钮点击区域过小、移动分组弹窗点击失效、订阅编辑模态框动画缺失。


🔒 安全

XSS 防护增强

  • html/safeHtml 模板标签:新增两个安全模板标签函数,html 自动转义所有插值(纯文本场景),safeHtml 保留 HTML 结构但经过白名单过滤(富文本场景)
  • <template> 解析sanitizeHtml 从 DOMParser 改用 <template>.content(DocumentFragment),保留孤立的 <tr>/<td>/<th>/<li> 等元素
  • STRIP_CONTENT_TAGS<script>/<style>/<iframe>/<noscript>/<object>/<embed>/<applet> 的内容完全丢弃,防止源代码作为文本泄漏
  • 子节点递归检查:移除非白名单标签时,对其子节点递归执行 sanitizeNode(),防止移动后跳过检查
  • eslint-plugin-no-unsanitized:新增 ESLint 规则,未使用 html/safeHtmlinnerHTML 赋值会报错
  • markdown.js:链接 href 改用 escapeAttr() 转义,输出经过 sanitizeHtml() 过滤
  • context-menu.js:自定义 HTML 项经过 sanitizeHtml() 过滤

🐛 Bug 修复

Markdown 代码块/行内代码渲染损坏

已生成的 <code><pre> 标签被后续步骤的 escapeHtml 双重转义,导致代码块内容显示为 HTML 源码而非渲染后的代码。改用占位符机制:先将代码块/行内代码替换为 \x00CODEBLOCK_N\x00 占位符,在所有解析步骤完成后再恢复。

面板背景模糊溢出

#app-main-container 添加 clip-path: inset(0 round 24px),修复面板弹出背景模糊时内容溢出圆角区域的问题。

关闭按钮点击区域

窗口关闭按钮(红绿灯按钮)新增 before:-inset-1.5 伪元素扩大点击区域,提升操作精度。

移动分组弹窗点击失效

规则库"移动到分组"弹窗中,分组按钮的点击事件改为通过 onReady 回调绑定到内容区域,修复事件委托失效导致无法选择分组的问题。

订阅编辑模态框动画

订阅编辑面板新增进入/退出动画(scale(0.95)→1 + opacity),与其他模态框保持一致的交互体验。


🏗 架构改进

依赖更新

包名 旧版本 新版本
@tauri-apps/cli 2.11.1 2.11.2
@codemirror/view 6.42.1 6.43.0
eslint 10.3.0 10.4.0
vitest 4.1.6 4.1.7