SuperAPI AI 工具集

security-headers

安全与审计

查看项目

更新于 10-15 13:58

技能介绍

用途

security-headers 技能用于为 Web 应用配置 HTTP 安全响应头,防御点击劫持、XSS 放大、MIME 类型混淆、SSL 剥离以及私有内容被搜索引擎索引等风险。资料将其比喻为城堡的城墙与护城河:即使攻击者通过了认证这道门,安全头也能阻止其自由移动或窃取数据。

主要能力

该技能通过 Next.js 的 middleware.ts 在每次请求时自动应用以下响应头:

  • Content-Security-Policy(CSP):控制脚本、样式、图片等资源的加载来源。
  • X-Frame-Options: DENY:阻止站点被任何 iframe 嵌入,防止点击劫持。
  • X-Content-Type-Options: nosniff:要求浏览器严格遵循 Content-Type,防止将图片当作脚本执行。
  • Strict-Transport-Security(HSTS):仅在生产环境启用,强制使用 HTTPS,配置为 max-age=31536000; includeSubDomains。
  • X-Robots-Tag: noindex, nofollow:仅应用于 /dashboard 等受保护路由,防止私有内容被搜索引擎收录。

CSP 采用动态构建方式,从环境变量读取 Clerk 与 Convex 的域名,避免硬编码,便于在开发、预发布和生产环境之间自动切换。

使用方式

安全头通过 middleware.ts 自动应用,无需手动逐个设置。资料给出的实现模式使用 clerkMiddleware 包装请求,在 NextResponse.next() 上依次设置各响应头,并通过 config.matcher 指定匹配的路由范围。

测试方式包括:

  • 使用 curl -I 检查本地或生产环境的响应头。
  • 使用在线工具验证部署后的站点:Security Headers(https://securityheaders.com/)、Mozilla Observatory(https://observatory.mozilla.org/)、SSL Labs(https://www.ssllabs.com/ssltest/)。

当新增第三方服务(如 Google Analytics 或自定义 CDN)时,需要相应更新 CSP 中的 script-src、connect-src、img-src 等指令。

适用场景

适用于使用 Next.js 构建、并集成 Clerk、Convex、Stripe 等服务的 Web 应用,尤其是需要满足浏览器安全策略加固、防止数据外泄、保护仪表盘等私有路由不被索引的场景。

限制与注意事项

  • CSP 中为兼容 Next.js 与 Clerk 保留了 'unsafe-inline' 和 'unsafe-eval',资料说明这是必要妥协,并通过输入净化与校验来缓解风险;更严格的替代方案是使用 nonce,但需要修改 SSR。
  • HSTS 仅在生产环境启用,因为在 localhost 上启用会破坏本地开发;一旦为某域名设置 HSTS,浏览器会记住,若需移除须设置 max-age=0 并等待所有用户浏览器收到新头,可能耗时数月。
  • X-Frame-Options 的 ALLOW-FROM 已废弃,不应使用。
  • 资料提醒不要硬编码 CSP 域名、不要使用过于宽松的通配符、部署后应测试响应头、新增第三方服务时应更新 CSP。
  • 资料中引用的 2023 年审计数据(仅 2.8% 网站正确实现全部推荐安全头)与 Magecart 攻击案例为原文陈述,未提供进一步来源细节。

相关技能

资料建议:XSS 防护可配合 input-validation 技能,点击劫持测试可配合 security-testing 技能。