大多数网站遭受攻击是通过 .htaccess 中几行代码就能修复的基本漏洞——即 HTTP 安全标头,这是服务器发送给浏览器以执行安全规则的指令:始终使用 HTTPS、不允许他人通过 iframe 嵌入,以及限制脚本来源。本文介绍关键标头及如何在 DirectAdmin 上添加它们。
简而言之:安全标头是最具成本效益的第一道防线,因为无需修改应用代码就能修复常见漏洞。在 .htaccess 中设置只需几分钟,即可立即应用于所有页面。
什么是安全标头?
当浏览器请求页面时,服务器会随内容一起返回 HTTP 响应标头。安全标头是其中一组特定标头,告诉浏览器如何执行安全规则——仅使用 HTTPS、不在 iframe 中渲染页面,或哪些来源可以加载脚本。所有现代浏览器都能理解并自动执行这些标头。
必须设置的关键标头
| 标头 | 防护对象 | 推荐值 |
|---|---|---|
| Strict-Transport-Security (HSTS) | 强制 HTTPS,防止拦截 | max-age=31536000; includeSubDomains |
| X-Frame-Options | 点击劫持(iframe 嵌入) | SAMEORIGIN |
| X-Content-Type-Options | MIME 嗅探 | nosniff |
| Referrer-Policy | 引用来源泄露 | strict-origin-when-cross-origin |
| Content-Security-Policy (CSP) | XSS、恶意脚本注入 | 定义允许的来源(见下文) |
在 .htaccess 中添加安全标头
在 Apache/LiteSpeed 主机(包括 DirectAdmin)上,将以下代码块添加到网站 public_html 文件夹中的 .htaccess 文件:
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "geolocation=(), camera=(), microphone=()" </IfModule>
保存后服务器会立即应用设置,无需重启,因为 .htaccess 在每次请求时都会被读取。若要生成可直接复制粘贴的自定义标头集,可以使用 AsiaGB 安全标头生成器,它会自动生成适用于 .htaccess 或 Nginx 的指令。
注意 HSTS:一旦启用,浏览器会在 max-age 期间记住只使用 HTTPS。如果您的 SSL 尚未在所有子域名上准备好,请暂时不要添加 includeSubDomains 或 preload——它们很难且需要很长时间才能撤销。
正确使用 Content-Security-Policy
CSP 是减少 XSS 最强大的标头,因为它声明了浏览器可以从哪些来源加载脚本、样式和资源。来自外部注入的未授权脚本将被阻止。基本策略:
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'none'; frame-ancestors 'self'; base-uri 'self'"
从基本策略开始逐步完善,因为过于严格的策略可能会阻止网站实际使用的资源(如 Google Fonts 或分析工具),导致页面出错。调整时请打开浏览器控制台,查看被阻止的内容,然后逐一允许来源。
验证安全标头是否生效
添加标头后,请确认它们确实被发送:
- 打开浏览器 DevTools(F12),前往网络标签,点击页面请求并查看响应标头。
- 使用在线安全标头检测工具查看得分和缺失项——例如 dnsxray.com 安全标头检测器,它会为您的网站评分并列出需要添加的标头。
- 运行
curl -I https://yourdomain.com查看服务器发送的所有标头。
为什么普通网站也应该设置安全标头
许多人认为安全标头只适用于大型或银行网站,但实际上小型普通商业网站更容易成为攻击目标,因为它们通常缺乏基本防护。自动化机器人会扫描缺少这些标头的网站以寻找突破口——通过 iframe 嵌入欺骗点击,或通过 XSS 漏洞注入脚本。添加几行标头代码是相对于所花时间最具成本效益的风险降低措施。
除了安全性,某些标头还间接有助于提升信任度和 SEO。通过 HSTS 强制 HTTPS 意味着用户不会遇到"不安全"警告,而 Google 已将 HTTPS 作为排名信号。拥有完整安全设置的网站看起来更专业,也能让访客更放心。
新手添加标头的顺序
如果您刚刚开始,不要一次添加所有标头。逐步操作以降低破坏网站的风险:
- 从 X-Content-Type-Options 和 X-Frame-Options 开始——这两个最安全,对普通网站几乎没有副作用。
- 在 SSL 对每个页面都正常工作后,添加 Referrer-Policy 和 Strict-Transport-Security(暂不启用 preload)。
- 最后添加 Content-Security-Policy,因为它必须根据网站实际使用的外部脚本进行调整——从宽松开始逐步收紧。
- 每次添加标头后立即测试网站,并查看控制台中是否有被阻止的内容。
逐步操作可以轻松识别是哪个标头导致了问题;如果添加某个标头后网站出现异常,您可以只撤销该标头,而不影响其他已正确设置的标头。
常见错误
- 重复标头——如果 .htaccess 和应用程序(例如 WordPress 插件)都设置了相同的标头,可能会造成重复或冲突。每个标头只在一处设置。
- CSP 设置过于严格导致网站出错——从宽松开始逐步收紧;如果网站使用了外部脚本,不要直接跳到
script-src ‘self’。 - 过早启用 HSTS preload——preload 只适合每个子域名都已完全准备好 HTTPS 的网站。
总结:.htaccess 中几行安全标头即可修复许多常见漏洞,无需修改应用代码。从 HSTS、X-Frame-Options、X-Content-Type-Options 和 Referrer-Policy 开始,准备好后再添加 CSP。
常见问题解答
在 DirectAdmin 上安全标头应放在哪里?
放在网站 public_html 文件夹中的 .htaccess 文件里。DirectAdmin 直接支持 .htaccess;保存后无需重启服务器即可立即生效。
CSP 会导致网站出错吗?
如果设置过于严格并阻止了网站实际使用的外部资源(如 Google Fonts 或分析工具),则会出错。请从基本策略开始,查看控制台中的阻止记录,然后逐一允许来源。
我应该立即启用 HSTS preload 吗?
不要急于启用。只有在确认每个子域名都支持 HTTPS 后再启用 preload,因为从浏览器预加载列表中移除域名既困难又耗时。
如何验证安全标头是否真正生效?
在 DevTools 网络标签的响应标头中检查,运行 curl -I,或使用在线安全标头检测工具为网站评分并列出缺失的标头。
在 DirectAdmin 中自主控制 .htaccess 和安全设置的主机
AsiaGB 主机让您在 DirectAdmin 中自行编辑 .htaccess 并设置安全标头,附带免费 SSL——起价 500 泰铢/年,配备泰国本地支持团队。
查看主机计划