29 lines
2.2 KiB
Markdown
29 lines
2.2 KiB
Markdown
# 浏览器安全响应头基线
|
||
|
||
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 命令和附件的端到端测试。
|