HTTP与安全相关的头

1. 内容安全策略 (Content Security Policy, CSP)

CSP 是一个强大的安全机制,它允许网站管理员控制浏览器能够为特定页面加载哪些资源。这有助于防止跨站脚本 (XSS) 攻击和其他代码注入攻击,因为它可以限制脚本、样式表、图片等内容的来源。

头名称: Content-Security-Policy

示例: Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.com; object-src 'none';

  • 这个例子表示默认只允许加载同源资源 ('self')。
  • 脚本只允许加载同源和 https://trusted.com 的。
  • 不允许加载任何插件 (object-src 'none')。

2. HTTP 严格传输安全 (HTTP Strict Transport Security, HSTS)

Strict-Transport-Security

HSTS 强制浏览器只能通过 HTTPS 与网站进行通信,从而防止中间人攻击 (man-in-the-middle attacks) 劫持用户通过不安全的 HTTP 连接访问网站的尝试。一旦浏览器收到 HSTS 头,它会在指定的时间内记住这个设置。

示例: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

  • max-age: 浏览器记住该设置的时间(秒),这里是一年。
  • includeSubDomains: 规则适用于所有子域名。
  • preload: 允许网站被包含在浏览器 HSTS 预加载列表中,以确保首次访问也是安全的。

3. X-Frame-Options

这个头用于防止点击劫持 (clickjacking) 攻击,即恶意网站将您的网站嵌入到 <iframe><frame> 中,诱骗用户点击。

  • 头名称: X-Frame-Options
  • 常见值:
    • DENY: 不允许任何页面嵌入此页面。
    • SAMEORIGIN: 只允许同源的页面嵌入此页面。
    • ALLOW-FROM uri: (已废弃,安全性不如 DENY/SAMEORIGIN)允许指定源的页面嵌入。
  • 示例: X-Frame-Options: DENY

4. X-Content-Type-Options

这个头用于防止浏览器进行 MIME 类型嗅探,从而避免一些安全漏洞。例如,如果服务器错误地将一个 JavaScript 文件标记为 text/plain,浏览器可能会根据文件内容将其识别为 JavaScript 并执行,这可能导致 XSS。

nosniff 会确保浏览器不会尝试将其作为 JavaScript 执行。这有助于缓解某些类型的跨站脚本 (XSS) 攻击

  • 头名称: X-Content-Type-Options
  • 常见值: nosniff
  • 示例: X-Content-Type-Options: nosniff

5. X-XSS-Protection (已不推荐使用)

这个头用于启用或禁用浏览器内置的 XSS 过滤器。然而,现代的 CSP 提供了更强大和灵活的 XSS 防御机制,并且这个头有时本身也可能引入安全问题,所以现在普遍不推荐使用它,而是优先配置 CSP。

  • 头名称: X-XSS-Protection
  • 常见值:
    • 0: 禁用 XSS 过滤器。
    • 1; mode=block: 启用 XSS 过滤器,并在检测到攻击时阻止页面渲染。
  • 示例: X-XSS-Protection: 0 (通常是为了确保其禁用,完全依赖 CSP)

6. Referrer-Policy

这个头控制浏览器在导航到其他页面时,如何发送 Referer (注意,是 Referer,不是 Referrer) 头信息。发送完整的 Referer 信息有时可能泄露敏感数据,比如 URL 中的会话 ID。

  • 头名称: Referrer-Policy
  • 常见值:
    • no-referrer: 永远不发送 Referer 头。
    • same-origin: 只在同源请求时发送 Referer 头。
    • strict-origin-when-cross-origin: 跨源请求只发送源(不包含路径和查询参数),同源请求发送完整 URL。
  • 示例: Referrer-Policy: same-origin

7. Origin

Origin: https://www.frontend-app.com: 安全相关头 (CORS)

  • 在跨域请求中,浏览器会自动添加 Origin 头,指明请求的来源域。
  • 服务器会根据其 CORS (跨域资源共享) 策略检查这个 Origin 头,决定是否允许该跨域请求。这是浏览器实现的一种重要的沙箱安全机制,防止恶意网站未经许可访问其他域的资源。

8. Referer

Referer: https://www.frontend-app.com/settings/profile: 安全相关头 (隐私/信息泄露)

  • 这个头指示了发起当前请求的页面的 URL。
  • 虽然在某些情况下有用(如统计),但它也可能泄露敏感信息(如 URL 中的会话 ID 或查询参数)。通过服务器设置 Referrer-Policy 响应头,可以控制浏览器在发送 Referer 头时的策略,以增强隐私保护和避免信息泄露。

9. Authorization

Authorization: Bearer eyJhbGciOiJIUzI1Ni...: 安全相关头

  • 这是最常见的认证头,用于携带客户端的身份凭证,例如 JWT (JSON Web Token)。服务器使用这个令牌来验证用户的身份和权限,是 API 安全的核心组成部分。