基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

HTTP 协议中的安全 Header 有哪些?

知识点图片

HTTP 协议中的安全响应头(Security Headers)是服务器向浏览器发送的指令,用于告知浏览器如何表现以增强安全性。配置这些 Header 是防御 XSS(跨站脚本攻击)、点击劫持、MIME 嗅探等常见攻击的低成本且高效的手段。

以下是目前主流且推荐配置的 HTTP 安全 Header:

1. Strict-Transport-Security (HSTS)

  • 作用:强制浏览器仅通过 HTTPS 连接与服务器通信,防止中间人攻击(MITM)和 SSL 剥离攻击。
  • 原理:一旦浏览器接收到该 Header,在指定的 max-age 时间内,即使用户输入 http://,浏览器也会自动在本地转换为 https:// 发起请求。
  • 推荐配置
    plaintext
    Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
    • max-age: 有效期(秒),通常设为一年(31536000)。
    • includeSubDomains: 应用于所有子域名。
    • preload: 申请加入浏览器内置的 HSTS 预加载列表(需去 hstspreload.org 注册)。

2. Content-Security-Policy (CSP)

  • 作用:防御 XSS 和数据注入攻击的“核武器”。它允许站点管理员定义哪些动态资源(JavaScript, CSS, Images 等)允许加载。
  • 原理:通过白名单机制,禁止加载不受信任的外部脚本,禁止内联脚本(inline script)执行。
  • 推荐配置(示例,需根据实际业务调整):
    plaintext
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none'
    • default-src 'self': 默认只允许同源资源。
    • object-src 'none': 禁止 Flash 等插件。

3. X-Content-Type-Options

  • 作用:禁止浏览器进行 MIME 类型嗅探(MIME Sniffing)。
  • 原理:如果服务器返回的 Content-Type 与实际内容不符,浏览器有时会尝试“猜测”文件类型并执行(例如把一个伪装成图片的文本文件当作 HTML/JS 执行)。该 Header 强制浏览器严格遵守服务器声明的 Content-Type
  • 推荐配置
    plaintext
    X-Content-Type-Options: nosniff

4. X-Frame-Options (XFO)

  • 作用:防御点击劫持(Clickjacking)攻击。
  • 原理:控制当前页面是否允许被嵌入到 <frame>, <iframe>, <embed><object> 中。
  • 推荐配置
    plaintext
    X-Frame-Options: DENY
    # 或者
    X-Frame-Options: SAMEORIGIN
    • DENY: 禁止任何页面嵌入该页面。
    • SAMEORIGIN: 仅允许同源页面嵌入。
    • 注:现代浏览器更推荐使用 CSP 的 frame-ancestors 指令,但 XFO 兼容性更好。

5. Referrer-Policy

  • 作用:控制 HTTP 请求头中 Referer 字段的发送策略,保护用户隐私和防止敏感信息(如 URL 中的 Token)泄露。
  • 推荐配置
    plaintext
    Referrer-Policy: strict-origin-when-cross-origin
    • strict-origin-when-cross-origin: 同源请求发送完整 URL;跨域请求仅发送域名(Origin);如果是 HTTPS 页面请求 HTTP 页面,则不发送 Referer。这是现代浏览器的默认行为,但显式设置更安全。
    • no-referrer: 从不发送 Referer。

6. Permissions-Policy (原 Feature-Policy)

  • 作用:控制浏览器可以使用哪些 API 和功能(如摄像头、麦克风、地理位置、USB 等)。
  • 原理:减少攻击面,防止恶意脚本滥用浏览器的高级功能。
  • 推荐配置(禁用敏感功能):
    plaintext
    Permissions-Policy: geolocation=(), camera=(), microphone=()

7. Set-Cookie 相关的安全属性

虽然这不是一个独立的 Header,但在 Set-Cookie Header 中设置正确的属性对 Session 安全至关重要:

  • HttpOnly: 禁止 JavaScript (document.cookie) 访问 Cookie,有效防御 XSS 窃取 Cookie。
  • Secure: 仅允许通过 HTTPS 传输 Cookie。
  • SameSite: 防御 CSRF(跨站请求伪造)攻击。
    • SameSite=Strict: 完全禁止第三方 Cookie。
    • SameSite=Lax: 允许部分第三方请求(如链接跳转)携带 Cookie(推荐默认)。
  • 示例
    plaintext
    Set-Cookie: session_id=xyz; Secure; HttpOnly; SameSite=Lax

进阶/较新的 Header

  • Cross-Origin-Opener-Policy (COOP):
    • same-origin: 将页面隔离在单独的进程中,防止跨域窗口攻击(如 Spectre 漏洞利用)。
  • Cross-Origin-Embedder-Policy (COEP):
    • require-corp: 只有当被加载的资源明确允许被加载时(通过 CORS 或 CORP),才允许加载。通常与 COOP 配合使用以启用 SharedArrayBuffer

已弃用或不推荐的 Header

  • X-XSS-Protection:
    • 曾用于启用浏览器的 XSS 过滤器。但现代浏览器发现该过滤器本身可能引入新的安全漏洞,目前主流浏览器(Chrome, Edge, Firefox)已移除或不再支持该功能。
    • 建议:不设置,或设置为 0 (X-XSS-Protection: 0),改用 CSP。
  • Public-Key-Pins (HPKP):
    • 极其容易造成配置错误导致网站无法访问(“自杀”),已被废弃。

总结与检测

要检查你的网站是否配置了这些 Header,可以使用在线工具:

00:00
00:00