wordpress如何合理屏蔽xmlrpc.php

  这两天见到有人又开始在刷我的xmlrpc接口玩登陆什么的了,感觉莫名的烦躁,随后将接口屏蔽之。屏蔽方法有很多种,随便列举几种。

  1. 删除根目录下的xmlrpc.php文件,简单粗暴有效,问题是一更新麻烦又来了。
  2. 写个函数放在functions.php中,屏蔽这个功能,问题是这个没试过,还得研究过滤器是哪个。
  3. 直接nginx或apache在配置文件屏蔽文件,会配置服务器就行。

  当然,我采取了方式三,毕竟之前就是这么干的,这个东西很好的屏蔽了wp-comments.php的接口,彻底摆脱垃圾评论。

Nginx配置代码如下:

location ~/xmlrpc\.php* {
    rewrite (.*) /index.php;
}

  这样请求被重定向到index.php就是wordpress主页,然后就404了,还是相当高明的,虽然很简单,当然你也可以直接return 403或404之类的,看你自己的喜好了。

  但是这样干之后,我打开手机版的wordpress客户端,问题发生了,无法访问了,这或用了xmlrpc接口,加入白名单即可,可以使用UA或IP等等,不过针对手机还是用UA最好了。可以在nginx上针对UA过滤,但是我不会这么干,有种太傻的感觉,如果这样干了,以后要改也太麻烦了。遂将配置文件改为如下:

location ~/xmlrpc\.php* {
    rewrite (.*) /xmlrpc_rewrite.php;
}

  在根目录先新建一个xmlrpc_rewrite.php的文件,接下来想做什么逻辑都可以,要找出那些没事刷接口的也容易,只是依据你设置的白名单,然后来段代码:

<?php
if(preg_match("/wp-android/i",$_SERVER['HTTP_USER_AGENT'])){
    include __DIR__."/xmlrpc.php";
}else{
    include __DIR__."/index.php";
}

  这样既可达到自定义过滤的目录,肯定也会有人想,如果单纯从USER_AGENT过滤看,还不如直接利用Nginx的UA过滤呢,确实是这样的,但是我不会啊!!!!

  一切都解决了,安心上班。

9条评论在“wordpress如何合理屏蔽xmlrpc.php”

  1. 我以前用Windows live writer编辑器写博的时候客好像就要用到这个文件,后来博客地址变成https以后编辑器就连接不上博客,后来也就适应后台编辑器了

写下你最简单的想法