今天下午博客挂了,发现服务器内存负载过高,ssh服务都不响应了,多次重启之后好不容登上去了,发现apache进程好多,看了一下apache的访问日志,日了狗了,发现有大量的对xmlrpc.php的请求:
XML-RPC是一个通过HTTP方法进行远程调用的,非常简单易用的东西。可以支持Perl、Java、Python、C、C++、PHP,以及许多其他编程语言。Wordpress和Drupal,以及许多其他内容管理系统都支持XML-RPC。
XML-RPC的隐藏特性之一,则是你可以使用system.multicall方法,在单个请求中进行多次尝试,这是非常有用的。它允许应用程序通过一条HTTP请求,执行多个命令。这就被众多黑客用来暴力破解密码。之前有很多对wp-login.php的攻击,但是wp-login做了登录保护,多次尝试之后会被禁止访问。但是xmlrpc中没有这些限制,这时候有人就利用xmprpc来对密码进行暴力破解,可以在一个请求里进行上百次的密码尝试。
那么如何避免这个问题呢?网上提供了两种方法,但是关闭xmlrpc之后会影响wordpress的jetpack和任何用到pingback的插件:
第一种就是屏蔽xmlrpc,将以下代码加到functions.php文件中。
1 | add_filter( 'xmlrpc_enabled' , '__return_false' ); |
第二种方法就是利用.htaccess限制xmlrpc.php的访问或者将请求进行重定向,定向到一个无关地址,从而降低服务器的负载。
如:
12345 | #限制xmlrpc.php的访问 <Files xmlrpc.php> Order Deny,Allow Deny from all < /Files > |
1234 | #重定向 <IfModule mod_alias.c> Redirect 301 /xmlrpc .php http: //example .com /custom-page .php < /IfModule > |