Skip to content

Security: lbjxr/CF-Navs

Security

SECURITY.md

安全问题反馈

请不要开公开 Issue

CF-Navs 是自托管的书签导航站,部署实例通常带有管理员账号、私密书签和私密分类。安全问题在修复上线前公开,等于给所有已部署实例提供攻击说明。

发现安全问题请使用 GitHub 的私密漏洞报告: 打开本仓库的 Security 标签 → Report a vulnerability。该通道只有仓库维护者可见,不需要公开你的邮箱。

如果该入口不可用,请通过仓库主页的维护者联系方式私下反馈,并在标题中注明是安全问题。

报告里请包含

  • 受影响的端点、页面或功能,以及触发所需的身份(匿名访客 / 已登录管理员 / 拥有一次性安装令牌)。
  • 复现步骤。如果涉及请求构造,请给出方法、路径与必要的请求头名称,不要粘贴真实 Token、Cookie 或密码。
  • 你观察到的实际结果,以及你认为它违反了什么边界(例如"匿名请求读到了私密书签的数据")。
  • 影响面判断:是信息泄漏、越权写入、拒绝服务,还是配置错误导致的条件性问题。

处理流程

  1. 维护者确认并复现,判定影响面与受影响版本。
  2. 在 develop 上修复,补上能失败于该缺陷的测试;涉及缓存或响应策略时同步更新 docs/reference/API_CONTRACT.md 与 docs/reference/PERFORMANCE_CONTRACT.md。
  3. 从 develop 发版、部署并完成部署后验证;main 只在维护者明确要求时作为归档快照合入,遵循 CONTRIBUTING.md 的分支规则。
  4. 上线后在 CHANGELOG.md 中公开描述问题与修复,并致谢报告者(除非报告者希望匿名)。

修复期间不会在公开 Issue、提交信息或文档中给出可直接利用的细节。 Code scanning 告警以其关联分支的重新扫描结果为准。本地扫描通过、提交修复或推送其他分支都不等于告警已修复;真实问题不通过关闭规则、缩小扫描范围或标记误报来消除。涉及归档分支的修复,先取得合并授权,再重扫并核对 GitHub 返回的状态。

已知的安全边界(不属于漏洞)

以下是当前设计上的已知取舍,报告前请先确认不是这几项:

  • 公开对象的图标可按 ID 枚举。 /api/icon/:id 与 /api/category-icon/:id 匿名可访问,但只对匿名访客可见的书签和分类返回真实图标;私密对象及挂在私密分类下的公开书签返回与"ID 不存在"完全一致的兜底图标。
  • custom_css 与 custom_js 属于公开设置,会随公开数据下发给每个访客并在其浏览器中执行。这是"自定义 CSS/JS"这个功能的预期行为,由管理员自行负责内容。
  • 登出撤销是最终一致的。 会话撤销名单写入 KV,其他 Worker isolate 最多约 15 秒后感知;KV 写入失败时登出接口仍返回成功,token 会继续有效到 exp。
  • 缺少 SESSION 绑定时会跳过撤销检查。 这是部署配置问题,请按部署文档正确配置绑定。
  • 一次性安装令牌 SETUP_TOKEN 由部署者保管。 站点安装完成后该令牌不再需要,后续安装请求会被永久拒绝。

HTML 交付与脚本注入

直接作为静态资源返回的 HTML 入口与 Worker 返回的 HTML 使用同一安全策略。构建从 worker/lib/assetHeaders.ts 生成规则,并将规则纳入离线外壳指纹;不要再手工维护另一份 CSP。

HTML 在保持再验证的同时使用 no-transform,阻止与严格脚本策略冲突的代理自动注入,而不是为消除控制台错误开放第三方脚本执行。Cloudflare 的 Web Analytics 设置说明 描述了该行为。因此,这些响应上的自动注入统计会被停用;后续若需要统计集成,应单独审查 CSP 和隐私边界。

There aren't any published security advisories