XML-RPC 是一种能够在 WordPress 和其他系统之间进行通信的规范。早期它被用于和其他博客平台之间的通讯,支持trackbacks和pingbacks。虽然现在已经过时了,但是根目录的xmlrpc.php文件仍然存在。黑客可能会利用这个文件,对我们的网站发起DDOS攻击和密码爆破。所以为了安全起见,最好禁止所有的用户访问这个文件。
之前观察网站日志的时候,还真的发现有个无聊的人在那里不停的发起下面这种POST请求
POST //xmlrpc.php HTTP/1.1
下面我会介绍目前两种主流的web服务器如何来禁止用户访问某个特定的资源
Nginx
由于我使用的是nginx,所以我直接在配置文件加了一条location指令限制用户访问这个文件
拒绝所有人访问结尾包含xmlrpc.php的文件
location ~ /xmlrpc\.php$ {
deny all;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这里有个细节就是,当location的优先级相同时(都是 ~),nginx会从上到下读取配置文件直到匹配到符合的结束。所以这个拒绝指令必须放在我的PHP反向代理配置的前面,否则的话当有人请求xmlrpc.php它会优先匹配到 .php的location块然后停止继续匹配。如果你使用的是“=” 就不存在这个问题,因为=的优先级最高。
location的匹配优先级从高到低
=, ^~, ~/~*, 不带符号
修改完配置文件后重新加载
nginx -s reload
Apache
只需要在服务器配置文件里加上这句
<Files "xmlrpc.php">
Require all denied
</Files>