这两天见到有人又开始在刷我的xmlrpc接口玩登陆什么的了,感觉莫名的烦躁,随后将接口屏蔽之。屏蔽方法有很多种,随便列举几种。
删除根目录下的xmlrpc.php文件,简单粗暴有效,问题是一更新麻烦又来了。
写个函数放在functions.php中,屏蔽这个功能,问题是这个没试过,还得研究过滤器是哪个。
直接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的文件,接下来想做什么逻辑都可以,要找出那些没事刷接口的也容易,只是依据你设置的白名单,然后来段代码:
if(preg_match("/wp-android/i",$_SERVER['HTTP_USER_AGENT'])){
include __DIR__."/xmlrpc.php";
}else{
include __DIR__."/index.php";
}
这样既可达到自定义过滤的目录,肯定也会有人想,如果单纯从USER_AGENT过滤看,还不如直接利用Nginx的UA过滤呢,确实是这样的,但是我不会啊!!!!
一切都解决了,安心上班。