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-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:预检请求缓存时间
安全风险:
- 使用通配符(*)可能导致敏感数据泄露
- 过于宽松的配置可能被恶意网站利用
最佳实践:
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传输cookieHttpOnly:禁止JavaScript访问cookieSameSite:控制跨站请求时是否发送cookieStrict:完全禁止跨站发送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:完全不发送Refererno-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
作用:控制浏览器特定功能的使用。
常用指令:
accelerometercamerageolocationmicrophonepayment等
示例配置:
Feature-Policy:
geolocation 'none';
microphone 'none';
camera 'none'
3. Expect-CT
作用:强制证书透明度(CT)验证。
配置:
Expect-CT: max-age=86400, enforce, report-uri="https://example.com/report"
实施建议
-
分阶段部署:
- 先使用Report-Only模式测试CSP等策略
- 监控报告并调整策略
- 确认无误后强制执行
-
测试工具:
- 使用SecurityHeaders.com等工具检查配置
- 定期扫描确保配置正确
-
框架集成:
- 现代Web框架通常提供安全头配置选项
- 考虑使用专门的安全中间件
-
持续监控:
- 监控安全头字段是否被意外修改
- 定期审查和更新策略
完整示例配置
# 强制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应用程序的安全性,防范多种常见攻击。