屏蔽XML-RPC服务,提高WordPress安全性

在屏蔽 WordPress XML-RPC 服务之前,我们先简单链接一下关于 XML-RPC 的一些基础知识。什么是 XML-RPC 协议,它有什么用,为什么要禁用它。

什么是XML-RPC协议

XML-RPC 的全称是 XML Remote Procedure Call,即XML远程过程调用,它是一套允许运行在不同操作系统、不同环境的程序实现基于网络过程调用的规范和一系列的实现。

简单说 RPC 就是通过像本地服务一样远程调用另外一台服务器上的服务来完成需求,XML-RPC 就是使用 XML 作为编码格式的 RPC。

XML-RPC 使用 http 作为传输协议,XML 作为传送信息的编码格式,一个 XML-RPC 消息就是一个请求体为 XML 的 http-post 请求,被调用的方法在服务器端执行并将执行结果以 XML 格式编码后返回。

一个 XML-RPC 协议包括两部分:

  • RPC client,用来向 RPC 服务端调用方法,并接收方法的返回数据。
  • RPC server,用于响应 RPC 客户端的请求,执行方法,并回送方法执行结果。

WordPress 对 XML-RPC 支持

WordPress 源代码中已经包含了完整的 RPC 服务端代码,它支持对文章,媒体,评论,分类,选项等等各方面数据的管理。我们可以使用 XML-RPC 对你的 WordPress 博客的各个方面进行操作,现在市面上 WordPress 管理 APP 或者桌面客户端基本都是使用 XML-RPC 实现的。

在 WordPress 3.5 版本之前,XML-RPC 服务一直默认是的被禁用的,因为它会造成安全漏洞,比如垃圾留言和 Trackback Spam 等。但是 WordPress 3.5 版本的发布将改变这个设置。因为 WordPress 开发团队的努力,这一安全隐患被修正,所以 WordPress 索性默认将其开启,并且不在后台提供关闭选。

并且 WordPress 更新到 3.5 之后,数据库中的 “enable_xmlrpc” 选项字段也将被删除,这样即使你在之前把 XML-RPC 设置为关闭,到了 WordPress 3.5 之后,也将开启。

屏蔽 WordPress XML-RPC 服务

如果我们只是在 WordPress 后台写写博客,也没有用到一些 WordPress 客户端来来发布文章,其实 XML-RPC 这个服务就没有必要,本着不用就关闭的安全原则,我们可以在当前主题的 functions.php 文件添加如下面两行代码来关闭它:

add_filter('xmlrpc_enabled', '__return_false');
add_filter('xmlrpc_methods', '__return_empty_array');