Skip to content

Security: jitOffice/office-ui

Security

SECURITY.md

安全策略

报告漏洞

不要开公开 issue。 请使用 GitHub 的私密漏洞报告:

仓库页 → Security → Report a vulnerability(jitOffice/office-ui)。 该入口会创建一条仅维护者与报告人可见的私密议题,并会为你保留一份草稿编号用于后续跟进。

处理时限(拟定,正式发布前确认):

阶段 时限
确认收到 72 小时内
初步分级与影响面判断 7 天内
修复或给出缓解方案 视严重程度,高危在下一次补丁版

我们不会对善意报告者采取法律行动,前提是你遵守下面几条。

报告时请遵守

  • 只做证明漏洞存在所需的最小操作。不要抓取真实用户数据,不要横向移动到其他系统。
  • 不要在公开渠道(issue、讨论区、社交媒体、博客)披露细节,直到修复发布或我们书面同意披露。
  • 报告里请给出:受影响版本、复现步骤、触发所需的最小示例、你判断的影响面。

本项目的攻击面(审查与报告时优先看这些)

办公类组件库的风险不在"组件本身被攻破",而在它如何渲染来自他人的内容。文档、表格、批注 都是不可信输入。以下是我们已知的重点面:

面 风险 设计要求
富文本 / 粘贴内容 XSS:<img onerror>、javascript: 链接、SVG 内脚本 内容渲染属于宿主文档引擎;L1 组件不得把任意 HTML 塞进 v-html/innerHTML
单元格与公式栏 CSV / 公式注入(`=cmd …、@INDIRECT、HYPERLINK` 拼接)
批注 / 评论 / 修订说明 用户生成内容直接渲染、Markdown 解析放大 一律按纯文本渲染;需要链接时走白名单协议(http https mailto tel)
文档导入解析 ZIP 解压炸弹、XML 外部实体、深层嵌套 解析在引擎侧,但组件库不得提供"无限制读取整个文件"的工具函数
链接与图片 URL javascript: / data: 协议、外链跟踪像素 URL 一律经协议白名单校验;默认不加载外部资源(内网/信创部署是第一类场景)
命令注册表 宿主把未校验字符串注册成命令 id / label 命令只从 Map 注册表取;未注册 id 返回 { ok: false, skipped: 'not-found' },绝不回退到全局对象或动态属性查找(window[id] 这类写法一律禁止)
UMD 全局 OfficeUI 与第三方脚本共存时命名冲突、被提前占用 ADR-0001 定的是固定名 OfficeUI(选完整词正是为了不与业务代码的 OJ 撞名)。"全局已被别人占用时怎么办"目前没有方案,属于待补设计,不要假定它可配置
声明式 API data-oj-* 属性值直接成为配置来源 属性值只接受白名单枚举与数值,不解析成选择器或 HTML
文档站 Playground 浏览器内 compiler-sfc 在线编译 = 刻意的任意代码执行面 必须在 sandbox 化的 iframe 内运行;不携带任何凭据;不接受来自父页面的未校验消息;预览域名与主站隔离

明确不属于本报告范围

  • 宿主应用自己的鉴权、会话与权限模型。
  • 你集成的第三方文档引擎(Univer、OnlyOffice 等)自身的漏洞 —— 请报给对应项目。
  • 依赖尚未发布版本的破坏性变更、缺少测试覆盖、代码风格问题。
  • 已公开的第三方漏洞(走该依赖自己的渠道)。

供应链

许可与依赖面是本项目的安全边界之一:

  • 运行时依赖为零(ADR-0004),CI 强制检查发布包的 dependencies 必须为空。
  • 依赖许可白名单见 NOTICE,CI 做许可扫描;GPL/AGPL/LGPL 与来源不明的图标、字体直接拒绝。
  • 产物不得含任何外部 URL(fonts.googleapis.com、CDN、统计脚本等),CI 扫描产物文本。 这条既是内网部署要求,也是防止数据外泄与供应链替换的措施。
  • 发版走 npm publish + provenance,构建在 CI 干净环境完成,不接受本地直接发包。

已知未决项

浏览器基线(ADR-0002,Proposed)会影响可用的安全原语 —— 例如较旧的 Chromium/Firefox ESR 上部分 sandbox、trusted-types、crypto 能力不完整。基线定案前,任何依赖这些能力的方案 都只能标记为待验证,不得当作既有防线写进文档或代码。

There aren't any published security advisories