WordPress 安全与加固,权威指南
已发表: 2021-01-26WordPress 广受欢迎。 互联网上大约有五分之一的网站以某种形式使用 WordPress。 无论是运行一个不起眼的博客,还是一个多站点内容管理系统 (CMS) 或电子商务站点。 因此,WordPress 网站成为经验丰富的黑客和脚本小子的热门目标也就不足为奇了。
任何网站管理员最不想看到的就是发现他们的网站已被黑客入侵; 可能被劫持并成为僵尸网络的一部分、传播恶意软件或参与拒绝服务 (DoS) 攻击。 在本文中,我们将分享一些技巧和策略来帮助您强化 WordPress 网站。
目录
- WordPress安全吗?
- 插件和主题
- 运行更少的软件
- 遵守最小特权原则
- 更新您的 WordPress 插件和主题
- 远离“无效”的 WordPress 插件和主题
- 让 WordPress 保持最新状态
- WordPress 托管
- WordPress仪表板
- 禁用注册
- 证书
- 两因素身份验证 (2FA)
- 强化 WordPress 核心
- 禁用调试日志记录
- 禁用 XML-RPC
- 限制 WordPress REST API
- 防止 WordPress 版本泄露
- 防止 WordPress 用户枚举
- 禁用 WordPress 文件编辑器
- 禁用主题和插件管理
- TLS (SSL)
- 结论和后续步骤
WordPress安全吗?
这是许多系统管理员提出的问题,这是理所当然的。 虽然 WordPress 总体上构建良好且安全,但它以容易出现安全漏洞而不是“企业级”而闻名。 这种名声并不完全公平。 通常情况下,问题在于 WordPress 是一个非常受欢迎的软件包,它易于设置,同时采用安全快捷方式。 这就引出了我们的第一个主题——插件和主题。
插件和主题
困扰 WordPress 安全性的头号问题也是它非常受欢迎的原因。 WordPress 插件和主题在质量和安全性方面差别很大。 尽管 WordPress 团队已经做了大量工作来帮助开发人员构建更安全的插件和主题,但它们仍然是安全的噩梦。 当使用维护不善的插件或从粗略来源获得的插件时,会注意到这一点。
在我们继续讨论 WordPress 插件和主题之前,让我们先了解一下 WordPress 插件到底是什么。 插件只是 WordPress 运行以扩展 WordPress 功能的自定义 PHP 代码。 有关更详细和技术性的说明,请参阅什么是 WordPress 插件。
同样,WordPress 主题允许自定义 WordPress 网站的视觉方面。 从攻击者的角度来看,两者之间几乎没有区别,因为两者都可以被滥用来运行恶意代码。
运行更少的软件
那么如何判断插件是否恶意? 这是一个复杂的问题,但幸运的是,我们为您提供了答案。 我们已经详细介绍了如何为您的 WordPress 网站选择最佳 WordPress 插件。
即使您进行了所有必要的研究,该插件也有可能仍然是安全威胁。 因此,降低风险的方法之一是只运行您绝对需要和信任的软件。 在安装新的 WordPress 插件之前,问问自己是否真的需要安装该插件。 特定于站点的插件中的小代码片段可以解决问题,还是您合法地需要一个完全成熟的插件?
重要— 对您在 Internet 上找到的代码片段保持高度警惕。 除非你完全理解它在做什么,否则永远不要使用一段代码——仅仅因为它在 StackOverflow 上,并不意味着它可以安全使用。
如果您确实需要运行插件,请确保它得到积极维护并定期更新,正如我们在指南中解释的那样。 根据经验,插件或主题的下载和最近更新越多,表明它被广泛使用并且它的作者正在积极维护它。 这并不意味着插件永远不会有漏洞。 但是,如果发现漏洞,开发人员将迅速采取行动并迅速发布修复程序。
尽量避免下载量不多的插件,关键是没有活跃的社区和定期更新。 如果一年内没有收到更新,通常是危险信号。
遵守最小特权原则
WordPress 不需要使用 MySQL root 用户来连接到它的数据库。 也不需要每个 WordPress 用户都具有管理员角色。 同样,以特权用户身份运行大多数程序也不是一个好主意,除非有特定的理由这样做。
安全最佳实践始终要求应用程序始终被授予允许其正常工作的最低权限,并禁用任何其他权限。 这种做法通常被称为最小特权原则。
让我们假设 WordPress 正在使用特权用户帐户连接到数据库。 如果 WordPress 插件包含 SQL 注入漏洞,攻击者可能不仅能够以管理员身份运行 SQL 查询,在某些情况下他们甚至可能能够执行操作系统命令。 如果攻击者成功执行操作系统命令,他们可能能够进行侦察并将攻击进一步升级到其他系统。
以管理权限运行软件,或为用户提供不必要的更多访问权限是自找麻烦。 它违背了久经考验的最小特权原则,因为它允许攻击者在发生安全漏洞时造成更大的破坏。
WordPress 的好处是它具有许多内置角色,您可以使用它们为不同的用户分配不同的权限,具体取决于他们的要求。 关于如何使用 WordPress 用户角色来提高 WordPress 安全性,我们已经对此进行了大量撰写。
更新您的 WordPress 插件和主题
WordPress 插件和主题更新很重要,不仅可以从新功能和错误修复中受益,还可以修补安全漏洞。 插件和主题都可以在 WordPress 界面中轻松更新。
一些商业插件可能有自己的机制来保持插件最新,但是,在大多数情况下,这对用户是透明的。 尽管如此,只要确保使用任何更新系统,您的插件和主题都会保持最新。
不要使用“无效”的 WordPress 插件和主题
WordPress 使用 GPL 1 . 无需赘述,GPL 许可允许任何人自由分发 GPL 许可的软件。 这包括商业/高级 GPL 许可的 WordPress 主题和插件。 因此,下载修改过的(通常称为无效的)高级主题或插件并免费使用可能并不违法。
但是,正如您可能已经猜到的那样,除了不支持插件开发人员之外,您不太可能收到无效插件的更新。 更重要的是,您无法知道该插件的源代码是否已被修改为做一些邪恶的事情。
让 WordPress 保持最新状态
就像您应该使您的插件和主题保持最新一样,您也应该注意保持您正在运行的 WordPress 版本是最新的。 幸运的是,现在这比过去容易得多,关键的安全更新会自动发生。 当然,除非您明确禁用此功能。
除了新功能、改进和错误修复之外,WordPress 核心更新还包含安全修复,可以保护您免受攻击者利用您的 WordPress 网站并将其用于不义之财。
WordPress 托管
您选择在何处以及如何托管您的 WordPress 网站将在很大程度上取决于您的要求。 虽然自己托管和管理 WordPress 没有任何问题,但如果您不那么精通技术,或者您想确保在不做大量繁重工作的情况下满足大多数 WordPress 安全基础知识,您可能需要选择托管的 WordPress 托管服务提供商,例如 Kinsta 或 WP Engine。
由于我们有两个主机托管的网站,我们已经写了关于它们的文章。 在我们的客户故事中,我们强调了我们与他们的经验。 要了解有关您的体验的更多信息,请阅读我们的 WP Engine 和 Kinsta 客户故事。 托管 WordPress 托管抽象出许多您需要担心的安全决策和配置。
自然,托管的 WordPress 托管也可能不适合您。 您可以选择自己托管 WordPress,尤其是在预算有限的情况下。 自托管 WordPress 还可以让您更好地控制 WordPress 安装。 要了解有关所有不同 WordPress 托管选项以及最适合您的选项的更多信息,请参阅选择 WordPress 托管的指南。
WordPress仪表板
您网站的 WordPress 仪表板是您不希望任何未经授权的人潜伏的地方。 虽然有些网站有正当理由允许公共用户使用 WordPress 仪表板登录,但这是一个巨大的安全风险,必须非常仔细地考虑。
幸运的是,大多数 WordPress 网站没有此要求,因此应该阻止访问 WordPress 仪表板。 有几种方法可以做到这一点,您应该选择最适合您的方法。
一种常见的做法是通过密码保护 WordPress 管理员 (wp-admin) 页面来限制访问。 另一种解决方案是只允许访问 /wp-admin 到多个选定的 IP 地址。
禁用注册
默认情况下,WordPress 不允许公共用户注册到您的 WordPress 网站。 要确认已禁用用户注册:
- 前往 WordPress 仪表板区域中的设置>常规页面
- 导航到会员部分
- 确保未选中任何人都可以注册旁边的复选框。
证书
与任何其他网站一样,对您的 WordPress 仪表板的访问权限与您的凭据一样强大。 实施强大的 WordPress 密码安全性是任何系统的关键安全控制,WordPress 也不例外。
虽然 WordPress 没有任何方法可以开箱即用地设置密码策略,但 WPassword 之类的插件对于在所有有权访问 WordPress 仪表板的用户中强制执行密码强度要求是绝对必要的。
在您的网站上实施强密码安全性后,使用 WPScan 测试弱 WordPress 凭据,以确保没有帐户仍在使用弱密码。
两因素身份验证 (2FA)
WordPress 仪表板的另一个重要安全控制是要求双重身份验证。 如果攻击者设法发现用户密码(例如,攻击者可能从数据泄露中发现用户密码),双因素身份验证 (2FA) 会使攻击者更难访问您的 WordPress 仪表板。
幸运的是,在 WordPress 上设置两因素身份验证非常容易。 您可以使用许多高质量的插件来添加此功能。 阅读适用于 WordPress 的最佳两因素身份验证插件,了解可用于 WordPress 的顶级 2FA 插件的亮点。
强化 WordPress 核心
尽管 WordPress 的核心是一个安全的软件,但这并不意味着我们不能进一步强化它。 以下是一些特定于 WordPress 核心的强化策略。
确保禁用调试日志记录
WordPress 允许开发人员将调试消息记录到文件中(默认为 /wp-content/debug.log)。 虽然这在开发环境中是完全可以接受的,但请记住,如果相同的文件和/或设置进入生产环境,攻击者也可以轻松访问此文件。
默认情况下禁用 WordPress 调试。 虽然最好仔细检查一下——确保没有在 wp-config.php 文件中定义 WP_DEBUG 常量,或者将其显式设置为 false。 有关所有调试选项的列表,请参阅 WordPress 调试指南。
如果出于某种原因您需要在您的生活网站上使用 WordPress 调试日志,请登录到您的 Web 服务器根目录之外的文件(例如 /var/log/wordpress/debug.log)。 改变 pa
define('WP_DEBUG_LOG', '/path/outside/of/webserver/root/debug.log');
禁用 XML-RPC
WordPress 的 XML-RPC 规范旨在允许不同系统之间的通信。 这意味着几乎任何应用程序都可以与 WordPress 交互。 WordPress XML-RPC 规范历来对 WordPress 很重要。 它允许它与其他系统和软件交互和集成。
好消息是 XML-RPC 已被 WordPress REST API 取代。 强调有关 XML-RPC 的一些安全问题; 多年来,它的界面一直是众多安全漏洞的根源。 它也可以被攻击者用于用户名枚举、密码暴力破解。 或通过 XML-RPC pingback 进行的拒绝服务 (DoS) 攻击。
因此,除非您正在积极使用 XML-RPC 并且有适当的安全控制,否则您应该禁用它。 由于无需安装第三方插件即可轻松实现这一点,我们将在下面介绍如何做到这一点。
虽然您可以简单地将 Web 服务器配置为阻止对 /xmlrpc.php 的访问,但这样做的首选方法是使用内置的 WordPress过滤器显式禁用 XML-RPC。 只需将以下内容添加到插件文件并在您的站点上激活它。
add_filter('xmlrpc_enabled', '__return_false');
当心
- 使用 WordPress必须使用插件来处理这个和其他类似的代码片段是个好主意。
限制 WordPress REST API
与 XML-RPC 一样,WordPress API 是第三方应用程序与 WordPress 通信的现代方式。 虽然使用安全,但建议限制其中的某些功能,以防止用户枚举和其他潜在漏洞。 与 XML-RPC 不同,WordPress 没有提供一种简单的本地方式来完全禁用 REST API(它曾经2 , 但这已被弃用,因此明智的做法是不再这样做),但是,您可以限制它。
与 WordPress 一样,您可以使用插件来实现此目的,也可以将以下过滤器添加到插件文件并在您的站点上激活它。 以下代码将通过使用 rest_authentication_errors WordPress 挂钩返回未经授权的 HTTP 状态代码(状态代码 401)来为未登录的任何人禁用 WordPress REST API。
add_filter( 'rest_authentication_errors', function( $result ) { if ( ! empty( $result ) ) { return $result; } if ( ! is_user_logged_in() ) { return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) ); } return $result; });
此外,WordPress REST API 默认启用 JSONP。 JSONP 是一种在现代浏览器支持 CORS(跨源资源共享)之前绕过浏览器同源策略的旧技术。 由于这可能被攻击者用作攻击中的一个步骤,因此没有真正的理由启用它。 建议使用以下 PHP 片段使用 rest_jsonp_enabled WordPress 过滤器禁用它。
add_filter('rest_enabled', '__return_false');
有关它的更多信息,请参阅过滤器的文档。
防止 WordPress 版本泄露
与许多其他 Web 应用程序一样,默认情况下,WordPress 在许多地方公开其版本。 版本泄露并不完全是一个安全漏洞,但是这些信息对于攻击者在计划攻击时非常有用。 因此,禁用 WordPress 的版本披露功能可能会使攻击变得更加困难。
WordPress 泄露了很多版本信息。 幸运的是,这个 GitHub gist 提供了一个完整的 WordPress 过滤器列表,可以以 WordPress 插件的形式禁用。 当然,您可以将此代码合并到您已经拥有的任何现有的特定于站点或必须使用的插件中。
防止 WordPress 用户枚举
WordPress 容易受到许多用户枚举攻击。 此类攻击允许攻击者确定存在哪些用户,无论用户是否存在。 虽然这看起来无害,但请记住,攻击者可能会将此信息用作更大攻击的一部分。 有关此主题的更多信息,请阅读如何使用 WPScan 枚举 WordPress 用户。
为了防止 WordPress 用户枚举,您需要确保禁用或限制以下 WordPress 功能。
- 将 WordPress REST API 限制为未经身份验证的用户
- 禁用 WordPress XML-RPC
- 不要将 /wp-admin 和 /wp-login.php 直接暴露在公共互联网上
此外,您还需要配置 Web 服务器以防止访问 /?author=<number>。 如果您使用的是 Nginx,您可以使用以下配置来防止 WordPress 用户枚举。
RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{QUERY_STRING} ^/?author=([0-9]*) RewriteRule .* - [R=403,L]
或者,如果您使用的是 Apache HTTP Server,您可以使用以下配置来防止 WordPress 用户枚举。
if ( $query_string ~ "author=([0-9]*)" ) { return 403; }
禁用 WordPress 文件编辑器
WordPress 最危险的功能之一是能够从 WordPress 仪表板本身编辑文件。 任何用户都应该没有正当理由需要这样做,当然也不是 WordPress 核心。 如果有的话,您要确保使用高质量的文件完整性监控 (FIM) 安全插件确切知道哪些文件发生了更改。
要收到文件更改的警报,请使用我们开发的网站文件更改监视器插件。
对您网站的任何文件更改都应通过安全连接(例如 SFTP)进行,或者最好在版本控制存储库中进行跟踪并使用 CI/CD 进行部署。
要禁用 WordPress 仪表板中的插件和主题文件编辑器,只需将以下内容添加到您的 wp-config.php 文件中。
define('DISALLOW_FILE_EDIT', true );
禁用主题和插件管理
一个好的 WordPress 安全最佳实践是从 WordPress 仪表板禁用插件和主题管理。 相反,请使用 wp-cli 等命令行工具进行这些更改。
通过禁用主题和插件更改,您可以大大减少 WordPress 网站的攻击面。 在这种情况下,即使攻击者成功入侵了管理员帐户,他们也无法上传恶意插件来升级攻击,使其无法访问 WordPress 仪表板。
wp-config.php 中定义的 DISALLOW_FILE_MODS 常量通过仪表板禁用插件和主题更新和安装。 它还禁用仪表板中的所有文件修改,从而删除主题编辑器和插件编辑器。
要在 WordPress 仪表板中禁用主题和插件修改,请将以下内容添加到您的 wp-config.php 文件中。
define('DISALLOW_FILE_MODS', true );
WordPress HTTPS (SSL / TLS)
传输层安全性 (TLS) 对您的 WordPress 安全来说是绝对必要的,它是免费且易于设置的。 注意:TLS 是取代安全套接层 SSL 的协议。 但是,由于 SSL 一词非常流行,许多人仍然将 TLS 称为 SSL。
当您通过 HTTPS(HTTP over TLS)访问您的网站时,HTTP 请求和响应无法被拦截和窥探,或者更糟糕的是被攻击者修改。
虽然 TLS 与您的 Web 服务器或内容交付网络 (CDN) 的关系比您的 WordPress 安装更多,但 TLS (WordPress HTTPS) 最重要的方面之一就是强制执行它。 网上有大量关于如何设置 WordPress HTTPS(SSL 和 TLS)的信息。
如果您不习惯编辑配置文件,并且更喜欢使用插件切换到 WordPress HTTPS,您可以使用真正简单的 SSL 或 WP force SSL。 它们都是非常好且易于使用的插件。
更安全的 WordPress 的后续步骤
如果你已经做到了这一步,很好,但这并不意味着没有更多的强化工作要做。 以下是您可以研究的一些项目,以进一步强化您的 WordPress 网站。
- 强化 PHP。 鉴于 PHP 是任何 WordPress 网站的核心组件,强化 PHP 是合乎逻辑的后续步骤之一。 我们在 WordPress 网站的最佳 PHP 安全设置中对此进行了广泛的讨论。
- 使用信誉良好的安全插件。 优质的安全插件提供了 WordPress 本身不包含的高级安全功能。 那里有大量的 WordPress 安全插件。 但是,请务必选择具有良好声誉的插件,最好是可以提供高级或商业支持的插件,例如我们用于 WordPress 的高质量安全插件。
- 执行文件权限审核。 对于在 Linux 上运行的 WordPress 网站,不正确的文件权限可能会让未经授权的用户获得对潜在敏感文件的访问权限。 有关此主题的更多信息,请参阅我们的配置安全 WordPress 网站和 Web 服务器权限的指南。
- 执行备份文件审核。 意外留下可访问的备份文件可能会泄露敏感信息。 这包括包含可能允许攻击者控制整个 WordPress 安装的秘密的配置。
- 强化您的网络服务器
- 强化 MySQL
- 添加必要的 HTTP 安全标头
- 确保您有一个正常工作的 WordPress 备份系统。
- 使用 DDoS 保护服务
- 实施内容安全策略
- 管理暴露的备份和未引用的文件。
结论——这只是 WordPress 安全之旅的第一步
恭喜! 如果您遵循上述所有建议并实施了所有推荐的安全最佳实践,那么您的 WordPress 网站就是安全的。 然而,WordPress 的安全性不是一次性修复——它是一个不断发展的过程。 强化 WordPress 网站(一次性状态)与多年保持安全之间存在很大差异。
加固只是 WordPress 安全过程(WordPress 安全轮)的四个阶段之一。 对于一个全年安全的 WordPress 网站,您必须遵循测试 > 强化 > 监控 > 改进的迭代 WordPress 安全流程。 您必须不断测试和检查您的 WordPress 网站的安全状态,强化软件,监控系统并根据您所看到和学习的内容改进您的设置。 例如:
- WPScan 等工具可以帮助您测试 WordPress 网站的安全状况
- WordPress 防火墙可以保护您的 WordPress 网站免受已知的恶意黑客攻击
- WordPress 活动日志可以帮助您走很长一段路——通过记录您网站上发生的所有更改,您可以提高用户责任感,了解每个用户在做什么,并密切关注所有幕后活动
- 我们的 WordPress 安全和管理插件等工具可以帮助您确保密码安全、强化 WordPress 安全流程、收到文件更改警报等等
您拥有所有正确的工具来确保您的网站安全。 即使您运行一个小型 WordPress 网站,也要花时间逐步完成本指南。 确保您最终不会将工作投入到构建一个出色的网站上,结果却被针对 WordPress 的攻击洗劫一空。
没有 100% 有效的安全性。 但是,通过应用本指南中介绍的各种强化技术,攻击者很难获得立足点并成功攻击您的 WordPress 网站。 请记住,当攻击者瞄准他们的下一个受害者时,您不必智取他们。 您只需要比下一个易受攻击的网站更安全!