SuperAPI AI 工具集

security-headers

安全与审计

查看项目

更新于 10-15 08:43

技能介绍

用途

Security Headers 是一个用于为每个 HTTP 响应添加 HTTP 安全响应头的技能。其定位是“零额外成本、高收益”的防护:通过统一设置安全头,预防整类攻击。规则明确要求:每个 HTTP 响应都必须包含安全头,没有例外。

主要能力与必需响应头

技能列出了必须配置的响应头及其防禦目标和推荐值:

  • Strict-Transport-Security:防止降级攻击与 SSL 剥离,值 max-age=31536000; includeSubDomains; preload
  • Content-Security-Policy:防 XSS、数据注入、点击劫持,具体值见下方 CSP 部分
  • X-Content-Type-Options:防 MIME 嗅探攻击,值 nosniff
  • X-Frame-Options:防点击劫持,值 DENY 或 SAMEORIGIN
  • Referrer-Policy:防向第三方泄露 URL,值 strict-origin-when-cross-origin
  • Permissions-Policy:防未经授权访问设备 API,值 camera=(), microphone=(), geolocation=()
  • X-XSS-Protection:旧的 XSS 过滤器,值 0(禁用,因为 CSP 更好)

各框架实现

技能提供四种框架的可直接复制代码。

Cloudflare Workers

定义一个 addSecurityHeaders(response: Response): Response 函数,基于原响应头创建 Headers,依次设置 HSTS、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy 和 CSP,并删除泄露服务器信息的 Server 与 X-Powered-By,最后用这些头重建并返回 Response。默认导出对象的 fetch 方法先调用 handleRequest,再传入 addSecurityHeaders。

Express.js / Node.js

提供两种方式:

方式 1(推荐):使用 helmet。示例配置 contentSecurityPolicy.directives,包含 defaultSrc、scriptSrc、styleSrc、imgSrc、connectSrc、frameAncestors,并设置 hsts: { maxAge: 31536000, includeSubDomains: true, preload: true }。

方式 2:手写中间件(无依赖)。在 app.use 中通过 res.setHeader 设置各项安全头,并调用 res.removeHeader('X-Powered-By'),最后 next()。

Next.js

在 next.config.js 中定义 securityHeaders 数组(HSTS、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy),并通过导出的 async headers() 返回 source: '/(.*)' 与对应 headers。

Laravel / PHP

创建 app/Http/Middleware/SecurityHeaders.php,在 handle 方法中对 $response->headers 设置各项安全头,并移除 X-Powered-By 与 Server。然后在 app/Http/Kernel.php 的 $middleware 数组中注册该中间件。

Content-Security-Policy(CSP)指南

CSP 是最复杂的头。原则是从严格开始,仅在需要时放宽。技能给出四种配置示例:

  • 严格(仅 API、无前端):default-src 'none'; frame-ancestors 'none'
  • 标准(带 CDN 资源的 SPA):default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://api.yourapp.com; font-src 'self' https://fonts.gstatic.com; frame-ancestors 'none'
  • 含第三方脚本(分析、支付):允许 https://js.stripe.com、https://www.googletagmanager.com 等脚本源,connect-src 允许 Stripe 与 Google Analytics,并用 frame-src https://js.stripe.com
  • 仅报告模式(先测试再强制):Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

需要移除的响应头

技能提醒移除会泄露技术栈的信息头:

  • Server: nginx/1.21.0 → 移除
  • X-Powered-By: Express → 移除
  • X-AspNet-Version: 4.0.30319 → 移除
  • X-AspNetMvc-Version: 5.2 → 移除

验证方法

技能给出验证途径:使用 curl 执行 curl -I https://yoursite.com 检查响应头;或在浏览器 DevTools → Network 标签 → Response Headers 中查看。

PDPA 2024 相关性

安全响应头属于 PDPA 2024 下的“合理安全措施”(langkah keselamatan yang munasabah)。缺失响应头导致 XSS 或点击劫持攻击并引发数据泄露,可能构成 Seksyen 5(1) 下的过失。