http-header安全字段总结
字数 2572 2025-08-27 12:33:42

HTTP安全头字段全面指南

HTTP安全头字段概述

HTTP安全头字段是Web服务器在HTTP响应中设置的特定标头,用于增强Web应用程序的安全性。这些标头可以防止多种攻击,如跨站脚本(XSS)、点击劫持、中间人攻击等,同时也能减少信息泄露的风险。

防止攻击的安全头字段

1. HTTP严格传输安全(HSTS)

作用:强制浏览器仅通过HTTPS访问网站,防止SSL剥离攻击。

配置语法

Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

参数说明

  • max-age:指定HSTS策略的有效期(秒),建议至少31536000(1年)
  • includeSubDomains:将策略应用于所有子域
  • preload:表示网站已提交到浏览器预加载列表

攻击场景

  • 未启用HSTS时,攻击者可通过中间人攻击将HTTPS降级为HTTP
  • 公共Wi-Fi环境下特别容易受到此类攻击

最佳实践

  • 对所有HTTPS网站启用HSTS
  • 初始部署时可设置较短的max-age(如300秒),确认无误后再延长

2. 内容安全策略(CSP)

作用:定义允许加载资源的来源,防止XSS、数据注入等攻击。

配置语法

Content-Security-Policy: <policy-directive>; <policy-directive>

常用指令

  • default-src:默认资源加载策略
  • script-src:控制JavaScript加载
  • style-src:控制CSS加载
  • img-src:控制图像加载
  • connect-src:控制XHR、WebSocket等连接
  • font-src:控制字体加载
  • object-src:控制插件(如Flash)加载
  • media-src:控制媒体(视频/音频)加载
  • frame-src:控制iframe加载
  • report-uri:指定违规报告发送地址

示例配置

Content-Security-Policy: 
  default-src 'self';
  script-src 'self' https://trusted.cdn.com;
  img-src *;
  style-src 'self' 'unsafe-inline';
  report-uri /csp-report-endpoint

安全策略

  • 避免使用unsafe-inlineunsafe-eval
  • 对动态生成的脚本使用nonce或hash
  • 实施报告模式(Content-Security-Policy-Report-Only)进行测试

3. 跨域资源共享(CORS)

作用:控制哪些外部域可以访问资源。

关键头字段

  • Access-Control-Allow-Origin:指定允许访问资源的域
  • Access-Control-Allow-Methods:允许的HTTP方法
  • Access-Control-Allow-Headers:允许的请求头
  • Access-Control-Allow-Credentials:是否允许发送凭据
  • Access-Control-Max-Age:预检请求缓存时间

安全风险

  • 使用通配符(*)可能导致敏感数据泄露
  • 过于宽松的配置可能被恶意网站利用

最佳实践

Access-Control-Allow-Origin: https://trusted.domain.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Credentials: true

4. Set-Cookie安全属性

安全属性

  • Secure:仅通过HTTPS传输cookie
  • HttpOnly:禁止JavaScript访问cookie
  • SameSite:控制跨站请求时是否发送cookie
    • Strict:完全禁止跨站发送
    • Lax:允许安全方法(GET)的跨站发送
    • None:允许所有跨站发送(需配合Secure)

示例

Set-Cookie: sessionid=12345; Secure; HttpOnly; SameSite=Lax; Path=/

5. X-Frame-Options

作用:防止点击劫持攻击。

可选值

  • DENY:完全禁止在frame中加载
  • SAMEORIGIN:仅允许同源frame加载
  • ALLOW-FROM uri:允许指定源的frame加载

推荐配置

X-Frame-Options: SAMEORIGIN

6. X-XSS-Protection

作用:启用浏览器内置的XSS过滤器。

可选值

  • 0:禁用过滤器
  • 1:启用过滤器(检测到攻击时清理页面)
  • 1; mode=block:启用过滤器并阻止页面加载

推荐配置

X-XSS-Protection: 1; mode=block

7. X-Content-Type-Options

作用:防止MIME类型嗅探攻击。

配置

X-Content-Type-Options: nosniff

相关头字段

  • Content-Disposition: attachment; filename=file.ext:强制下载而非执行
  • X-Download-Options: noopen:禁止直接打开下载文件

信息泄露防护头字段

1. Server头字段

风险:暴露服务器类型和版本信息。

缓解措施

  • 禁用或修改Server头
  • 使用中间件重写该头

2. X-Powered-By

风险:暴露后端技术栈信息。

最佳实践

  • 完全移除该头字段
  • 在应用框架配置中禁用

3. X-AspNet-Version

风险:暴露ASP.NET框架版本信息。

解决方案

  • 在web.config中移除:
    <httpRuntime enableVersionHeader="false" />
    

其他安全头字段

1. Referrer-Policy

作用:控制Referer头中包含的信息量。

可选值

  • no-referrer:完全不发送Referer
  • no-referrer-when-downgrade(默认):HTTPS→HTTP时不发送
  • same-origin:仅同源时发送
  • origin:只发送源(不包含路径)
  • strict-origin:同origin,但HTTPS→HTTP时不发送
  • origin-when-cross-origin:跨域时只发送源
  • strict-origin-when-cross-origin:同源发送完整,跨域只发送源
  • unsafe-url:总是发送完整URL

推荐配置

Referrer-Policy: no-referrer-when-downgrade

2. Feature-Policy

作用:控制浏览器特定功能的使用。

常用指令

  • accelerometer camera geolocation microphone payment

示例配置

Feature-Policy: 
  geolocation 'none';
  microphone 'none';
  camera 'none'

3. Expect-CT

作用:强制证书透明度(CT)验证。

配置

Expect-CT: max-age=86400, enforce, report-uri="https://example.com/report"

实施建议

  1. 分阶段部署

    • 先使用Report-Only模式测试CSP等策略
    • 监控报告并调整策略
    • 确认无误后强制执行
  2. 测试工具

    • 使用SecurityHeaders.com等工具检查配置
    • 定期扫描确保配置正确
  3. 框架集成

    • 现代Web框架通常提供安全头配置选项
    • 考虑使用专门的安全中间件
  4. 持续监控

    • 监控安全头字段是否被意外修改
    • 定期审查和更新策略

完整示例配置

# 强制HTTPS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

# 内容安全策略
Content-Security-Policy: 
  default-src 'none';
  script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com;
  style-src 'self' 'unsafe-inline' https://cdn.example.com;
  img-src 'self' data: https://*.example.com;
  font-src 'self' https://cdn.example.com;
  connect-src 'self' https://api.example.com;
  frame-src 'self';
  form-action 'self';
  base-uri 'self';
  report-uri /csp-report

# CORS设置
Access-Control-Allow-Origin: https://trusted.example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

# Cookie安全
Set-Cookie: session=123; Secure; HttpOnly; SameSite=Lax; Path=/

# 点击劫持防护
X-Frame-Options: SAMEORIGIN

# XSS防护
X-XSS-Protection: 1; mode=block

# MIME类型强制
X-Content-Type-Options: nosniff

# 移除信息泄露头
Server: Unknown
X-Powered-By: 
X-AspNet-Version: 

# Referrer策略
Referrer-Policy: no-referrer-when-downgrade

# 功能策略
Feature-Policy: 
  geolocation 'none';
  microphone 'none';
  camera 'none';
  payment 'none'

通过全面配置这些HTTP安全头字段,可以显著提高Web应用程序的安全性,防范多种常见攻击。

HTTP安全头字段全面指南 HTTP安全头字段概述 HTTP安全头字段是Web服务器在HTTP响应中设置的特定标头,用于增强Web应用程序的安全性。这些标头可以防止多种攻击,如跨站脚本(XSS)、点击劫持、中间人攻击等,同时也能减少信息泄露的风险。 防止攻击的安全头字段 1. HTTP严格传输安全(HSTS) 作用 :强制浏览器仅通过HTTPS访问网站,防止SSL剥离攻击。 配置语法 : 参数说明 : max-age :指定HSTS策略的有效期(秒),建议至少31536000(1年) includeSubDomains :将策略应用于所有子域 preload :表示网站已提交到浏览器预加载列表 攻击场景 : 未启用HSTS时,攻击者可通过中间人攻击将HTTPS降级为HTTP 公共Wi-Fi环境下特别容易受到此类攻击 最佳实践 : 对所有HTTPS网站启用HSTS 初始部署时可设置较短的max-age(如300秒),确认无误后再延长 2. 内容安全策略(CSP) 作用 :定义允许加载资源的来源,防止XSS、数据注入等攻击。 配置语法 : 常用指令 : default-src :默认资源加载策略 script-src :控制JavaScript加载 style-src :控制CSS加载 img-src :控制图像加载 connect-src :控制XHR、WebSocket等连接 font-src :控制字体加载 object-src :控制插件(如Flash)加载 media-src :控制媒体(视频/音频)加载 frame-src :控制iframe加载 report-uri :指定违规报告发送地址 示例配置 : 安全策略 : 避免使用 unsafe-inline 和 unsafe-eval 对动态生成的脚本使用nonce或hash 实施报告模式(Content-Security-Policy-Report-Only)进行测试 3. 跨域资源共享(CORS) 作用 :控制哪些外部域可以访问资源。 关键头字段 : Access-Control-Allow-Origin :指定允许访问资源的域 Access-Control-Allow-Methods :允许的HTTP方法 Access-Control-Allow-Headers :允许的请求头 Access-Control-Allow-Credentials :是否允许发送凭据 Access-Control-Max-Age :预检请求缓存时间 安全风险 : 使用通配符(* )可能导致敏感数据泄露 过于宽松的配置可能被恶意网站利用 最佳实践 : 4. Set-Cookie安全属性 安全属性 : Secure :仅通过HTTPS传输cookie HttpOnly :禁止JavaScript访问cookie SameSite :控制跨站请求时是否发送cookie Strict :完全禁止跨站发送 Lax :允许安全方法(GET)的跨站发送 None :允许所有跨站发送(需配合Secure) 示例 : 5. X-Frame-Options 作用 :防止点击劫持攻击。 可选值 : DENY :完全禁止在frame中加载 SAMEORIGIN :仅允许同源frame加载 ALLOW-FROM uri :允许指定源的frame加载 推荐配置 : 6. X-XSS-Protection 作用 :启用浏览器内置的XSS过滤器。 可选值 : 0 :禁用过滤器 1 :启用过滤器(检测到攻击时清理页面) 1; mode=block :启用过滤器并阻止页面加载 推荐配置 : 7. X-Content-Type-Options 作用 :防止MIME类型嗅探攻击。 配置 : 相关头字段 : Content-Disposition: attachment; filename=file.ext :强制下载而非执行 X-Download-Options: noopen :禁止直接打开下载文件 信息泄露防护头字段 1. Server头字段 风险 :暴露服务器类型和版本信息。 缓解措施 : 禁用或修改Server头 使用中间件重写该头 2. X-Powered-By 风险 :暴露后端技术栈信息。 最佳实践 : 完全移除该头字段 在应用框架配置中禁用 3. X-AspNet-Version 风险 :暴露ASP.NET框架版本信息。 解决方案 : 在web.config中移除: 其他安全头字段 1. Referrer-Policy 作用 :控制Referer头中包含的信息量。 可选值 : no-referrer :完全不发送Referer no-referrer-when-downgrade (默认):HTTPS→HTTP时不发送 same-origin :仅同源时发送 origin :只发送源(不包含路径) strict-origin :同origin,但HTTPS→HTTP时不发送 origin-when-cross-origin :跨域时只发送源 strict-origin-when-cross-origin :同源发送完整,跨域只发送源 unsafe-url :总是发送完整URL 推荐配置 : 2. Feature-Policy 作用 :控制浏览器特定功能的使用。 常用指令 : accelerometer camera geolocation microphone payment 等 示例配置 : 3. Expect-CT 作用 :强制证书透明度(CT)验证。 配置 : 实施建议 分阶段部署 : 先使用Report-Only模式测试CSP等策略 监控报告并调整策略 确认无误后强制执行 测试工具 : 使用SecurityHeaders.com等工具检查配置 定期扫描确保配置正确 框架集成 : 现代Web框架通常提供安全头配置选项 考虑使用专门的安全中间件 持续监控 : 监控安全头字段是否被意外修改 定期审查和更新策略 完整示例配置 通过全面配置这些HTTP安全头字段,可以显著提高Web应用程序的安全性,防范多种常见攻击。