背景
全仓扫描确认:next.config.mjs、proxy.ts、vercel.json 均未配置任何安全响应头。当前生产站点没有 CSP、HSTS、X-Frame-Options、Referrer-Policy、Permissions-Policy。
风险:站点可被任意 iframe 嵌套(clickjacking);XSS 一旦发生无 CSP 兜底;评论区(Giscus)、AI 助手(BYO key 存 localStorage)等交互面放大影响。
方案
next.config.mjs 加 headers():
- 第一批(无破坏风险,直接上):
X-Frame-Options: SAMEORIGIN、X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、Permissions-Policy(关 camera/mic/geolocation)、HSTS。
- 第二批(CSP,需先盘点):先以
Content-Security-Policy-Report-Only 上线观察一周(站内脚本源:GA / Umami / Giscus / Sentry / R2 图源),无误报后切强制。不要一步到位上强制 CSP,Giscus iframe 和内联 theme script 很容易被误杀。
验收
- securityheaders.com 评级 ≥ A-
- Giscus 评论、AI 助手、Umami/GA 上报、Sentry 全部正常
pnpm build 前后路由表 diff 无变化(headers 不影响 SSG)
背景
全仓扫描确认:
next.config.mjs、proxy.ts、vercel.json均未配置任何安全响应头。当前生产站点没有 CSP、HSTS、X-Frame-Options、Referrer-Policy、Permissions-Policy。风险:站点可被任意 iframe 嵌套(clickjacking);XSS 一旦发生无 CSP 兜底;评论区(Giscus)、AI 助手(BYO key 存 localStorage)等交互面放大影响。
方案
next.config.mjs加headers():X-Frame-Options: SAMEORIGIN、X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、Permissions-Policy(关 camera/mic/geolocation)、HSTS。Content-Security-Policy-Report-Only上线观察一周(站内脚本源:GA / Umami / Giscus / Sentry / R2 图源),无误报后切强制。不要一步到位上强制 CSP,Giscus iframe 和内联 theme script 很容易被误杀。验收
pnpm build前后路由表 diff 无变化(headers 不影响 SSG)