Zephyr v2.3.2
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/safeHtml的innerHTML赋值会报错- 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 |