Files
nekonest-cloud/docs/security-headers.md

29 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 浏览器安全响应头基线
NekoNest Cloud 在 Cloudflare Worker 的统一响应出口为页面、API 和图片响应设置浏览器安全头。它是免费公测的基础防护,不代表严格 CSP、可验证发布或 sealed 端到端实证已经完成。
## 当前策略
- `Content-Security-Policy` 默认只允许同源资源,禁止插件对象、被其他页面嵌入、站内 frame、跨源表单提交和媒体加载;图片只额外允许 `data:``blob:`Worker 只额外允许 `blob:`
- `X-Frame-Options: DENY` 作为旧浏览器的点击劫持兜底。
- `Referrer-Policy: no-referrer` 避免页面地址随跨站请求泄露。
- `X-Content-Type-Options: nosniff` 禁止内容类型猜测。
- `Permissions-Policy` 关闭当前产品不需要的摄像头、麦克风、定位、支付、USB 等浏览器能力。
- HTTPS 响应设置一年 HSTS;HTTP 本地开发响应不会设置 HSTS。当前不使用 `includeSubDomains` 或 preload,避免在正式域名与租户子域策略确定前扩大承诺范围。
- `/api``/dashboard``/admin` 及其子路径统一使用 `Cache-Control: private, no-store`,即使某个业务处理器遗漏设置,也不让账户或控制面数据被浏览器或共享缓存保存;公开页面原有的缓存策略不被覆盖。
当前页面没有远程第三方脚本、样式或字体。以后增加外部来源时,必须同时修改策略、测试和本文,不能临时放宽为通配来源。
## 尚未完成的严格 CSP
Vinext / React 当前渲染链仍需要兼容内联脚本和样式,因此 `script-src``style-src` 暂时包含 `'unsafe-inline'`。策略不允许 `'unsafe-eval'`,也不允许任意远程脚本来源,但这仍不是 nonce 或 hash 约束的严格 CSP。
扩大公测前仍需完成:
- 为框架输出接入 nonce 或 hash,并移除脚本侧 `'unsafe-inline'`
- 先以 report-only 方式观察真实违规,再收紧正式策略;
- 选择公开登录方案后,重测跳转、退出和账户恢复路径;
- 完成依赖锁定、构建哈希/provenance 与服务工作者回滚证据。
浏览器安全头不能解决托管方可更新 PWA 的根本信任问题,也不能替代 sealed 命令和附件的端到端测试。