在 WordPress 上配置 HTTP 安全标头

已发表: 2022-02-23

大多数现代浏览器都支持各种 HTTP 安全标头,以提高 WordPress 网站的安全性,更好地保护访问者免受点击劫持、跨站脚本和其他常见攻击等浏览器攻击,甚至改善网站访问者的隐私在线的。

本文概述了这些 HTTP 安全标头是什么,解释了它们的工作原理以及它们的范围。 它还解释了如何将这些 HTTP 安全标头添加到您的网站以提高 WordPress 网站的安全性。

什么是 HTTP 安全标头?

HTTP 安全标头是一系列 HTTP 标头1 在 Web 客户端(浏览器)和 Web 服务器之间交换,用于指定 Web 客户端和服务器之间 HTTP 通信的安全相关设置。 在您的 WordPress 网站上启用安全标头可以提高您的网站抵御常见攻击的能力,包括跨站点脚本 (XSS) 和点击劫持。

HTTP 安全标头如何提高 WordPress 安全性

HTTP 安全标头可以通过指示浏览器相应地启用各种安全功能来帮助提高 WordPress 网站的安全性。 在许多情况下,实现正确的标头是一件棘手的事情,甚至可能在旧浏览器中产生不同的结果(或完全无效),因此在应用任何更改之前在测试或暂存环境中尝试任何更改是最佳实践一个实时的 WordPress 网站。

最常用的 HTTP 安全标头

哪些标题做什么? 让我们深入了解一些最重要和最常用的 HTTP 安全标头。

严格的运输安全

Strict-Transport-Security HTTP 标头指示浏览器强制执行 HTTP 严格传输安全 (HSTS) 2 . HSTS 标头指示访问浏览器始终通过 HTTPS(而不是 HTTP)访问站点,即使用户(或试图运行中间人攻击的攻击者)试图通过 HTTP 访问站点,浏览器将强制切换到 HTTPS,即使 HTTP 不可用 - 在这种情况下,您应该仅在启用 HTTPS 并且完全正常工作且没有混合内容问题的情况下启用 HSTS 3 .

以下 HTTP 严格传输安全 (HSTS) HTTP 响应标头启用 HSTS 持续 1 年(31536000 秒)。


Strict-Transport-Security: max-age=31536000

内容安全策略

Content-Security-Policy HTTP 安全标头是一个具有强大功能和可配置性的 HTTP 标头。 它配置浏览器的内容安全策略 (CSP),这是现代浏览器中的一组安全功能,可提供额外的安全层,有助于检测和缓解跨站点脚本 (XSS) 和数据注入攻击等攻击。

内容安全策略 (CSP) 也是出了名的棘手,因为正确的 CSP 设置将非常广泛地取决于所讨论的网站,并且应该在部署之前进行大量测试——因此,它有一个姊妹内容安全策略-仅报告4 仅用于测试 CSP 的 HTTP 标头。

以下是一个非常简单的内容安全策略 (CSP) 策略的示例,该策略仅允许从提供网站的来源加载资产。


Content-Security-Policy: default-src 'self'

但是,内容安全策略 (CSP) 的可配置性比这个简单示例中显示的要好得多。 CSP 包括其他指令,例如script-srcstyle-srcimg-src ,以指定浏览器可以从中加载资源(例如 CSS、图像和字体)的源。 有关如何配置 CSP 的完整列表,请参阅内容安全策略快速参考指南。

X-Content-Type-Options

X-Content-Type-Options HTTP 安全标头是所有主要浏览器都遵守的非标准标头,可防止由 MIME 类型嗅探导致的跨站点脚本 (XSS) 攻击5 . 当存在时,此标头告诉浏览器严格遵循 Content-Type HTTP 标头中定义的 MIME 类型,并且浏览器不应尝试为响应数据本身检测正确的 MIME 类型。 标头有一个指令——nosniff。


X-Content-Type-Options: nosniff

旧的或未使用的 HTTP 安全标头

还有一些旧的和未使用的 HTTP 安全标头。 它们不再被使用,或者不再起作用,因为它们要么是作为临时修复、实验引入的,要么是作为非标准计划引入的,后来要么被弃用,要么被完全取代。 下面是这些 HTTP 安全标头的列表。

由 Content-Security-Policy 替换的 HTTP 安全标头

X 框架选项

X-Frame-Options HTTP 安全标头是现已弃用的标头,最初由 Microsoft Internet Explorer 引入(并被具有不同程度的统一性和兼容性的其他浏览器采用)以保护浏览器免受跨站脚本 (XSS)、点击劫持和其他依赖于放置在 iframe 内的网站的攻击。

此标头现在已由 frame-ancestors 内容安全策略 (CSP) 指令替换。 建议使用带有 frame-ancestors 指令的 CSP 来代替 X-Frame-Options。

X-XSS-保护

X-XSS-Protection HTTP 安全标头是一种非标准标头,用于启用或禁用浏览器对跨站点脚本 (XSS) 攻击的保护。 实际上,攻击者通常很容易绕过此标头,因此大多数现代浏览器都会忽略此标头。

公钥引脚

Public-Key-Pins HTTP 安全标头用于配置在 Google Chrome 和 Firefox 中引入的公钥固定 (HPKP) 安全功能,以防止 TLS 证书欺骗。 HPKP 通过让 Web 服务器向浏览器提供网站使用的 TLS 证书公钥的一组加密哈希值来工作,浏览器将反过来使用这些哈希值与它在后续请求中从服务器接收到的证书进行比较。 问题是 HPKP 管理起来相当复杂,并且经常导致可能完全禁用网站访问的错误配置——因此,不再建议使用它。

在 WordPress 中添加 HTTP 安全标头

当 HTTP 安全标头在您的 Web 服务器或适用的情况下在您的内容交付网络 (CDN) 或 Web 应用程序防火墙上配置时,它们的效果最佳。 这允许在每次请求时发送它们。 或者,虽然不太理想,但您可以使用 WordPress 插件为您设置这些标题。

既然我们已经介绍了 HTTP 安全标头的用途,那么可以通过以下几种方式在您的 WordPress 网站上启用它们。

使用 Apache HTTP Server 在 WordPress 中添加 HTTP 安全标头

以下是启用 HTTP 严格传输安全 (HSTS)、X-Content-Type-Options 和简单内容安全策略所需的 Apache HTTP Server 配置示例。


<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self'"
</ifModule>

使用 Nginx 在 WordPress 中添加 HTTP 安全标头

同样,以下是启用 HTTP 严格传输安全 (HSTS)、X-Content-Type-Options 和简单内容安全策略所需的 Nginx 配置示例。


server {
add_header Strict-Transport-Security "max-age=31536000; always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
}

使用插件在 WordPress 中添加 HTTP 安全标头

或者,虽然效率较低(因为它依赖 WordPress 本身来修改标头),但使用 WordPress 插件可能是将 HTTP 安全标头添加到 WordPress 网站的最简单方法。 诸如重定向插件之类的插件允许您将自定义 HTTP 标头添加到您的网站。

如何检查网站的 HTTP 安全标头

在 WordPress 网站上添加 HTTP 安全标头后,您需要确保它们配置正确并按预期工作。 最简单的测试方法是使用名为 Security Headers 6的免费工具.

使用安全标头工具就像输入您的网站 URL 并点击“扫描”一样简单。 然后,您将获得从 A+ 到 F 的等级,并说明该等级是如何确定的。

本文中使用的参考文献[ + ]

本文使用的参考资料
1 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
2 https://owasp.org/www-project-secure-headers/#http-strict-transport-security
3 https://web.dev/what-is-mixed-content/
4 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
5 https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#mime_sniffing
6 https://securityheaders.com/