安全与信任
内容、代码与产物的边界,以及公开发布前的检查责任。
不同内容,不同信任模型
| 输入 | 处理 | 维护者责任 |
|---|---|---|
| Markdown / 产品手册 | 拒绝 raw HTML、allowlist sanitizer、最终 HAST 断言 | 审查正文和外链内容 |
| MDX | 支持 import、JSX、表达式;不执行 Markdown sanitizer | 作为代码审查依赖与执行行为 |
| Typst | 固定编译器,Glyphweave HTML 清洗,产物路径限制 | 审查源代码、包与资源 |
| 插件 | 受信任仓库代码、严格配置和槽位合同 | 审查构建权限与浏览器脚本 |
不能通过把文件标记成 Markdown、MDX 或插件来获得任意内容的安全保证。产品没有访客上传入口,也不从网络动态编译用户提交的 MDX。
文件与图片
资源路径经过解析、解码与 realpath 限制。导入不能越过显式资源根,symlink 也不能绕过;生产同步只读取当前 generation 的索引与 manifest。
文件迁移采用预检、互斥锁、唯一 staging 与 rename。失败恢复明确拥有的目标,不覆盖已有文章,也不自动删除来源不明的目录。原始作者文件保持不变。
Markdown HTTPS 图片是外链,并不因为站点静态化就变得永久可用或隐私安全;需要可控资源时,先保存到允许根再导入。不会隐式下载远程媒体。
私有与不列出
private、archived 与草稿在正式构建前隔离;这些正文、图片和 PDF 不应进入公开产物或索引。unlisted 会输出公开路由并 noindex,因此不适合密码、个人敏感资料或仅授权读者可见的文章。
Git 仓库设为私有不意味着已发布网页私有。RSS、搜索、sitemap 与手册都是公开输出,提交前应审查。
CI 权限
普通 PR 可以执行代码测试,但不获得部署密钥。生产上传单独使用受限 Cloudflare 令牌,并在门禁成功后验证提交和产物身份。不绕过分支保护,不用 pull_request_target 编译未审查的 MDX。
第三方 Actions 固定 commit,浏览器基线固定 Linux 容器环境。依赖公告通过 pnpm security:check 评估;有期限的例外不是永久豁免,到期后需要重新处理。
发布前清单
- 元数据真实,摘要和页面语言一致,状态与可见性符合预期。
- 没有本机绝对路径、密钥、未公开文件或意外下载的资源。
- Markdown 危险 HTML/URL、目录穿越和跨来源冲突测试通过。
- MDX、插件与第三方包经过代码审查。
- 发布矩阵、产物链接、PDF 字体、浏览器与摘要验收通过。
发现问题后先阻止发布;已经公开的敏感信息不能只靠从首页隐藏。撤下产物、轮换暴露凭证,并根据缓存和搜索传播范围处理影响。