
安全HTTP头是一组HTTP响应头,告诉浏览器如何安全地处理您的内容。没有正确的安全HTTP头,您的网站容易受到跨站脚本攻击(XSS)、点击劫持和MIME类型嗅探等攻击。好消息是:添加它们不需要更改代码——只需在您的 .htaccess 或Nginx配置中添加几行即可。
本指南解释了最重要的安全HTTP头,展示您如何免费检查当前的安全评分,并指导您如何在Apache或Nginx托管上添加这些HTTP头。
每个网站都应该拥有的关键安全HTTP头
| HTTP头 | 防护范围 | 推荐值 |
|---|---|---|
Strict-Transport-Security |
HTTPS降级攻击 | max-age=31536000; includeSubDomains |
Content-Security-Policy |
XSS和未授权资源加载 | 按网站自定义(例如 default-src 'self') |
X-Frame-Options |
通过iframe嵌入的点击劫持 | SAMEORIGIN 或 DENY |
X-Content-Type-Options |
MIME类型嗅探攻击 | nosniff |
Referrer-Policy |
引用者信息泄露给第三方 | strict-origin-when-cross-origin |
Permissions-Policy |
未授权访问摄像头、麦克风、地理定位 | geolocation=(), microphone=(), camera=() |
X-XSS-Protection |
反射型XSS(旧版浏览器) | 1; mode=block |
立即免费检查您的安全HTTP头
在添加HTTP头之前,快速检查一下您的网站已经发送了哪些头,还缺少哪些。以下是一个免费在线工具,提供详细、易于理解的结果:
理解评分系统
安全HTTP头检查器通常根据存在哪些HTTP头以及它们的配置效果如何,对您的网站评分从A+到F:
大多数未配置的网站评分为D或F。一个好的目标是B+或更高。对于电子商务、银行或基于登录的网站,目标应为A+。
在.htaccess中添加安全HTTP头(Apache / DirectAdmin)
在基于Apache的托管上——包括AsiaGB的DirectAdmin托管——在您的根目录 .htaccess 文件中添加安全HTTP头:
# 安全HTTP头 — 添加到 .htaccess
<IfModule mod_headers.c>
# 强制HTTPS 1年
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" "expr=%{HTTPS} == 'on'"
# 防止点击劫持
Header always set X-Frame-Options "SAMEORIGIN"
# 防止MIME嗅探
Header always set X-Content-Type-Options "nosniff"
# 引用者策略
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# 禁用摄像头/麦克风/地理位置
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
# 旧版XSS防护
Header always set X-XSS-Protection "1; mode=block"
</IfModule>
在Nginx中添加安全HTTP头(VPS)
在运行Nginx的VPS上,在您的网站配置的 server 块内添加这些HTTP头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header X-XSS-Protection "1; mode=block" always;
在上线前在测试环境中测试安全HTTP头
在将安全HTTP头推送到生产服务器之前,先在测试环境中进行测试——尤其是CSP,它最容易破坏功能。以下是可靠的测试工作流程:
- 检查浏览器DevTools控制台:添加HTTP头后,打开控制台选项卡(F12)并查找"拒绝加载"或"被Content Security Policy阻止"的消息。
- 从Report-Only模式开始:使用
Content-Security-Policy-Report-Only来监控违规,而不阻止任何内容。至少运行两到四天以捕捉边缘情况。 - 测试每个功能路径:练习所有网站功能——表单、嵌入式视频、地图、支付小工具、登录流——因为每个可能需要CSP中的不同源允许。
- 在移动设备上测试:某些移动浏览器对CSP指令的解释略有不同。至少在iOS Safari和Android Chrome上进行测试。
- 使用检查器进行实时验证:部署到生产环境后,重新运行 dnsxray.com/security-headers 以确认HTTP头确实被正确提供。
没有测试环境?使用子域(例如 staging.yourdomain.com)或本地开发设置。在Apache上使用XAMPP或Laragon时,将HTTP头放在Virtual Host配置中,而不是.htaccess中,以便更容易管理。
跨平台的安全HTTP头:Apache、Nginx和框架
设置安全HTTP头的方法取决于您的托管堆栈。以下是最常见环境的快速参考:
| 平台 | HTTP头设置位置 | 注释 |
|---|---|---|
| Apache(共享托管) | 文档根目录的 .htaccess |
需要 mod_headers ——在大多数主机上默认启用,包括AsiaGB |
| Nginx(VPS) | nginx.conf 或 sites-enabled/ 中的网站配置 |
使用 add_header ... always; —— always 标志确保HTTP头也出现在错误页面上 |
| Next.js | next.config.js HTTP头数组 |
在构建时应用;支持正则表达式路由匹配 |
| Laravel | HTTP中间件类 | 在 app/Http/Kernel.php 全局中间件堆栈中注册 |
| Cloudflare Pages / Netlify | _headers 文件或平台配置 |
Apache .htaccess在这些平台上不适用 |
| WordPress(插件) | .htaccess或安全插件 | 在 # BEGIN WordPress 上方添加HTTP头以防止永久链接保存覆盖 |
深入理解Content-Security-Policy
Content-Security-Policy(CSP)是最强大的——也是最复杂的——安全HTTP头。它告诉浏览器确切地允许哪些源加载脚本、样式、图像、字体和其他资源。精心设计的CSP使XSS攻击执行起来要困难得多,因为即使攻击者注入脚本标签,如果源不在白名单中,浏览器也会拒绝运行它。
核心CSP指令
default-src—— 任何未明确设置的指令的回退script-src—— JavaScript文件允许的源style-src—— CSS文件允许的源img-src—— 图像允许的源connect-src—— Fetch、XHR和WebSocket连接允许的端点frame-ancestors—— 控制哪些页面可以在iframe中嵌入您的网站(替代X-Frame-Options)
使用Google Analytics和Google Fonts网站的示例CSP
# 示例CSP —— 根据您的网站自定义
Header always set Content-Security-Policy \
"default-src 'self'; \
script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com; \
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; \
font-src 'self' https://fonts.gstatic.com; \
img-src 'self' data: https://www.google-analytics.com; \
connect-src 'self' https://www.google-analytics.com; \
frame-ancestors 'self';"
从Report-Only模式开始:在强制执行之前使用 Content-Security-Policy-Report-Only。这会将违规记录到浏览器控制台而不阻止任何内容,让您在影响真实用户之前完善策略。
安全HTTP头影响对比
每个安全HTTP头都防护不同的攻击方式。了解缺失每个HTTP头的风险有助于您优先考虑首先实现的内容:
| HTTP头 | 优先级 | 缺失的风险 | 最容易受影响的网站 |
|---|---|---|---|
Strict-Transport-Security |
关键 | 攻击者可以将HTTPS降级为HTTP | 任何HTTPS网站 |
Content-Security-Policy |
关键 | XSS攻击可以窃取cookies和会话令牌 | 基于登录的、电子商务网站 |
X-Frame-Options |
高 | 网站可以在iframe中被嵌入用于点击劫持 | 银行、管理员仪表板 |
X-Content-Type-Options |
中等 | 浏览器可能执行伪装成其他文件类型的脚本 | 接受文件上传的网站 |
Referrer-Policy |
中等 | 私密URL(例如查询字符串中的令牌)泄露给第三方 | 使用基于URL令牌的网站 |
Permissions-Policy |
中等 | 第三方脚本可以访问摄像头、麦克风或位置 | 任何带有第三方脚本的网站 |
HSTS预加载:您必须理解的长期承诺
HSTS预加载意味着将您的域注册到Chrome、Firefox、Safari和Edge在其源代码中内置的硬编码列表中。浏览器在发出任何网络请求之前强制执行HTTPS——甚至在首次访问时——因为它已经知道您的网站需要它。
在 hstspreload.org 提交到HSTS预加载列表之前的要求:
- 覆盖所有子域的有效SSL证书
Strict-Transport-SecurityHTTP头,max-age至少为31536000(一年)includeSubDomains指令存在preload指令存在- 所有HTTP请求首先重定向到HTTPS
关键警告:HSTS预加载极其难以撤销。浏览器需要数月时间才能发布更新的列表来移除您的域。如果任何子域没有SSL或仍然提供HTTP内容,切勿提交预加载——用户将无法访问该子域数月。
添加安全HTTP头后的常见问题
实现安全HTTP头有时会破坏功能。以下是最常见的问题及其解决方法:
1. 添加CSP后出现白屏
最常见的原因是CSP阻止了所需的脚本或样式表。打开浏览器DevTools(F12),检查控制台选项卡,并查找"拒绝加载..."错误。每个错误都会包含被阻止的URL——将该域添加到相应的CSP指令中。
2. 外部图像或视频未显示
验证您的CSP中的 img-src 和 media-src 包含托管这些资产的域。例如,如果您从CDN提供图像,该CDN域必须明确列出。
3. Google Analytics或跟踪标签停止工作
将跟踪平台域添加到 script-src 和 connect-src:
script-src 'self' 'unsafe-inline'
https://www.googletagmanager.com
https://connect.facebook.net;
connect-src 'self'
https://www.google-analytics.com
https://www.facebook.com;
4. HSTS防止开发期间的HTTP访问
这是预期行为——看到HSTS HTTP头的浏览器将在max-age持续时间内拒绝HTTP连接。对于本地测试,使用隐身窗口,或在Chrome的 chrome://net-internals/#hsts 中清除HSTS状态。
调试提示:使用 dnsxray.com/security-headers 来验证在更改 .htaccess 或Nginx配置后您的服务器实际发送了哪些HTTP头。缓存的响应有时会显示过时的HTTP头数据。
WordPress的安全HTTP头
在 # BEGIN WordPress 块上方将HTTP头添加到您的根 .htaccess(当您保存固定链接时,WordPress会在该标记下方重写)。或者,使用插件:
- WP Rocket —— 安全HTTP头可在高级规则下使用
- Wordfence —— 扩展保护包括HTTP头配置
- Headers Security Advanced & HSTS WP —— 专门的安全HTTP头管理插件
分步说明:使用dnsxray.com检查HTTP头
- 打开 dnsxray.com/security-headers
- 输入您的网站URL(例如
https://yourdomain.com)并单击检查 - 查看您的总体评分以及每个单独HTTP头的状态
- 缺失的HTTP头会显示具体的修复说明
- 将HTTP头添加到
.htaccess或Nginx后,重新检查以确认评分改进
立即尝试:打开 dnsxray.com/security-headers,输入您的URL,在30秒内获得您的安全HTTP头评分——完全免费,无需账户。
常见问题
Content-Security-Policy-Report-Only 模式开始监控违规而不强制执行,然后在切换到强制执行之前完善策略。Strict-Transport-Security 响应HTTP头实现的机制的名称。一旦浏览器看到此HTTP头,它就会在 max-age 中指定的持续时间内强制执行HTTPS连接,而不允许回退到HTTP。AsiaGB托管内置安全HTTP头
每个托管计划都包括免费SSL、HSTS、cPGuard和Imunify360恶意软件保护——起价500泰铢/年