如何保护WordPress的wp-login.php和wp-cron.php

提醒:本文最后更新于 2747 天前,文中所描述的信息可能已发生改变,请仔细核实。


下面就简单以CentOS和Nginx说下,如何保护Wordpress的wp-login.php和wp-cron.php,最后会说说/wp-admin/install.php。

wp-login.php是我们Wordpress的登录文件,wp-cron.php使我们的Wordpress的定时任务执行触发文件。

首先,对于wp-login.php,可以利用Nginx做了个验证,如下操作:

1.利用htpasswd,生成帐号和密码文件,如下命令:

#下面命令生成密码,其中admin是用户名(回车后会要求你输入密码):
htpasswd -c /usr/local/nginx/passwd_kn007.db admin

2.在你域名conf中,引入验证,比如kn007.net.conf中,在其他location之前,再加多下面的语句:

location ~ ^/wp-login\.php {
 auth_basic "kn007's Auth System";
 auth_basic_user_file /usr/local/nginx/passwd_kn007.db;
 location ~ .*\.php?$ {
  try_files $uri =404;
  fastcgi_pass  unix:/tmp/php-cgi.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
 }
}

为什么要在里面重新匹配PHP呢,因为如果不的话,就变成文件下载了。。。

这样做,可能对大家平时访问带来了不便。但是这样是安全的,算是两步验证了,对于那些暴力破解什么的,完全有效,不管你是get还是post,都是返回401,你必须按正规渠道来,才能访问。而且毕竟是Nginx作为前端,其抗压能力,非常出众,不在话下,如果配合Fail2Ban的话,那就是倍儿爽。

接下来说说wp-cron.php,现在Wordpress越来越成熟了,也没出现过自动文章发不出,超时什么的问题了。而且完全按照你Wordpress的任务时间去访问,非常高效。但是这个文件也可以被外部访问,每次访问都会检查数据库的定时列表,需不需要做一些定时任务,大并发会导致PHP和MySQL的极高的负载,非常没有必要。

即便是你在wp-config.php禁用Cron,你也会在系统的crontab加入一个访问任务,来访问wp-cron.php,达到定时任务执行的效果。(以前这个方法挺好的,因为定时任务经常各种原因,没有被执行,现在不会了。所以没什么必要),外部可以访问,你照样还是要挂。

怎么办呢?我是直接屏蔽外部访问,仅允许服务器自身访问(因为Wordpress执行任务的时候,就是在服务器上请求的)。跟上面操作一样,也是在你的域名conf下,添加下面语句:

location ~ ^/wp-cron\.php {
 allow 127.0.0.1;#本地IP
 allow 162.250.97.124;#服务器IP
 deny all;
 location ~ .*\.php?$ {
  try_files $uri =404;
  fastcgi_pass  unix:/tmp/php-cgi.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
 }
}

这样就ok了。怎么样,简单粗暴,解决问题。

以上如果通过Varnish就更简单省事了,Varnish可以在内存里直接伪造个相同页面,这里就不细说。

附带说一句,可以考虑在自己VPS安装VNC,然后对一些地址限制为仅限内部访问。比如Wordpress的安装文件(/wp-admin/install.php),安装的时候,上服务器的浏览器上安装,安全,节省性能。

现在的Wordpress的安装文件(/wp-admin/install.php)一样很傻,如果你不才去上面措施,那么建议安装后,禁止访问吧。只要:

location ~ ^/wp-admin/install\.php {
 deny all;
 log_not_found off;
 access_log off;
}

为什么不直接删除呢,因为每次Wordpress更新后,都有这货。。。

至于为什么屏蔽,原因就是,访问它,它会读取内部cache(一般在MySQL,如果你没转移的话),如果不存在,读取MySQL数据库,确认安装,返回安装完毕,设置cache(同样,如果没有外部Cache,那么就在MySQL里面)。如果没安装,就给你安装,配置WP。

这里面产生的数据库访问,最少一次。外部Cache,至多一次。但一般很多人都没有外部存储做Cache,大并发时总归要消耗性能的。而且这个文件也是首次安装才有用。没什么必要。当然,如果你用了外部存储来做Cache(比如Memcache),你可以不考虑这个因素。

Wordpress比较主要的被攻击点就是这3个地方。怎么防护,简单的说到这。

转载请注明转自:kn007的个人博客的《如何保护WordPress的wp-login.php和wp-cron.php