WordPress安全必读:如何禁用xmlrpc.php提升网站防护
WordPress的XML-RPC规范旨在标准化不同系统间的通信,使得外部应用程序(如其他博客平台和桌面客户端)能够与WordPress进行交互。自WordPress诞生以来,该规范一直是其核心组成部分,发挥着重要作用。若没有XML-RPC,WordPress将如同孤岛般与互联网其他部分隔绝。然而,xmlrpc.php文件也存在明显缺陷,它可能被用于注入安全漏洞,因此已被WordPress REST API取代。REST API在开放WordPress与其他应用程序交互方面表现更优。本文将深入探讨xmlrpc.php的本质、禁用原因、检测方法以及禁用与启用的场景。
什么是xmlrpc.php?
XML-RPC是一种支持WordPress与其他系统通信的规范,它通过HTTP作为传输机制和XML作为编码机制来标准化这些通信。XML-RPC的出现早于WordPress,最初应用于b2博客软件,该软件是WordPress的前身,于2003年问世。相关代码存储在站点根目录下的xmlrpc.php文件中。尽管XML-RPC已逐渐过时,但它依然存在。在WordPress早期版本中,XML-RPC默认关闭,但从v3.5版本起默认开启,主要为了支持WordPress移动应用程序与安装进行对话通讯。若您使用的是v3.5之前的版本,可能需要手动启用XML-RPC才能通过移动应用程序发布内容,因为该应用程序并非运行WordPress,而是通过xmlrpc.php与WordPress网站通信。除了移动应用程序,XML-RPC还支持WordPress与其他博客平台的通信、引用和pingback功能,并为Jetpack插件提供支持,该插件可连接自托管的WordPress网站至WordPress.com平台。然而,随着REST API集成到WordPress核心,xmlrpc.php已不再用于此类通信。REST API不仅支持范围更广,还拥有更强的灵活性。
为什么要禁用xmlrpc.php?
禁用xmlrpc.php的主要原因在于其可能被用于注入安全漏洞,成为攻击目标。既然不再需要XML-RPC进行外部通信,就没有理由保留其激活状态,禁用它是提高站点安全性的有效手段。尽管如此,为何不将其完全从WordPress中移除?这是因为WordPress始终强调向后兼容性。良好的网站管理要求保持WordPress及插件、主题为最新版本,但总有部分用户无法或不愿更新至最新版本,特别是安装了早于REST API版本的WordPress。若这些站点仍需访问xmlrpc.php,禁用它将导致功能缺失。此外,xmlrpc.php启用的pingback和Trackbacks功能可能被黑客利用,通过发送大量pingback发起DDoS攻击,使服务器过载。同时,xmlrpc.php每次请求都会发送用户名和密码进行身份验证,存在暴力攻击风险,而REST API使用OAuth令牌进行身份验证,更为安全。因此,若您使用的是最新版WordPress(通过REST API与外部系统通信),应禁用xmlrpc.php以避免安全风险。
xmlrpc.php是否在您的WordPress网站上运行?
要确定xmlrpc.php是否在您的WordPress网站上运行,不能简单检查文件是否存在,因为即使禁用了XML-RPC,该文件依然存在。在删除任何内容前,请务必备份您的网站。检查方法如下:使用WordPress XML-RPC验证服务,它会检测您的站点并告知您xmlrpc.php是否启用。例如,输入一个测试网站进行检测,结果可能显示”网站XML-RPC检测-已禁用状态”,表明xmlrpc.php在该测试网站上已被禁用。若检查发现xmlrpc.php仍启用,应采取相应措施关闭它。
如何禁用xmlrpc.php?
禁用xmlrpc.php有两种方法:使用插件或手动添加代码。
如何使用插件禁用xmlrpc.php?
(1)使用插件禁用XML-RPC 安装Disable XML-RPC插件是最简单的方法。通过WordPress仪表盘的”插件”界面安装并启用该插件,无需其他操作即可禁用XML-RPC。再次进行检测,结果将显示”网站第二次XML-RPC检测-已禁用状态”。
(2)使用插件禁用XML-RPC Pingbacks 若要禁用xmlrpc.php的某部分功能(如Pingback),可使用Disable XML-RPC Pingback插件,这样仍可访问XML-RPC的其他功能。
(3)使用插件配置XML-RPC和REST API激活 若需更细致地控制xmlrpc.php和REST API的配置,可安装REST XML-RPC Data Checker插件。安装并启用后,在设置>REST XML-RPC Data Checker中点击”XML-RPC”选项卡,可精确配置xmlrpc.php的激活功能,甚至完全关闭它。此外,该插件还提供控制REST API的选项卡。
如何在没有插件的情况下禁用xmlrpc.php?
若不想安装插件,可通过WordPress过滤器、.htaccess文件或Nginx配置文件添加代码来禁用xmlrpc.php。
(1)通过过滤器禁用xmlrpc.php 将以下功能添加到插件或主题functions文件中:add_filter( ‘xmlrpc_enabled’, ‘__return_false’ ); 编写插件是更好的做法。
(2)通过.htacess文件或者Nginx配置文件禁用xmlrpc.php 若服务器使用Apache,在网站根目录的.htaccess文件中添加以下代码:Order Allow,Deny Deny from all 若服务器使用Nginx,将以下代码添加到Nginx.config文件中:location ~* ^/xmlrpc.php$ { return 403; }
何时需要启用xmlrpc.php?
在某些情况下,可能需要启用xmlrpc.php,但这种情况并不常见。例如,若没有运行REST API(不建议使用),但需要在WordPress网站与其他系统间通信;或无法更新WordPress至版本4.4或更高版本,因此无法访问REST API(可能是由于主题或插件不兼容)。若可能,建议尽快更换不兼容的主题或插件。此外,若正在使用无法访问WP REST API但可访问XML-RPC的外部应用程序,从长远来看,建议更新该应用程序或切换至兼容REST API的应用程序。以上情况都不是坚持启用XML-RPC的理由,它仅存在于WordPress中是为了向后兼容,适用于使用过时系统的场景。对于希望保持站点最新并采用最新技术的用户,禁用xmlrpc.php是更明智的选择。
小结
XML-RPC规范诞生于WordPress之前,是WordPress与外部系统通信的手段。它曾是WordPress的重要组成部分,但现在可能成为安全风险。若非必要,应禁用xmlrpc.php。REST API在开放WordPress与其他应用程序通信方面表现更优,因此禁用xmlrpc.php可以提高网站安全性。按照本文所述步骤操作,即可安全地禁用xmlrpc.php。