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

下面就简单以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》

看过网上有一篇文章 修改wordpress网站的wp-admin目录 也能实现类似的效果
@World: 修改这些主要是怕WP自动更新时,又要去改,岂不是麻烦
看过网上有一篇文章 修改wordpress网站的wp-admin目录 也能实现类似的效果 不过效果就没有你这篇文章来的全面了
@World:
我最近被人攻击了,老是往这3个方向来。wp-cron.php很快就带来高负载。
@kn007: 被攻击说明有价值
哈哈
你上面写得方法 可以直接解决WP升级覆盖的问题了 赞一个
@World: 哈哈,谢谢,收到主题了~已经收藏。
我来了 就是瞅瞅!
@所谓刚子:
欢迎
看不懂,这是混个脸熟。
@从良未遂: 欢迎~
有发现一个和我的主题一样的网站,缘分啊
@lawrui: 额
wp-config.php 我要设置下, 登录这里准备换成扫码登录了
@牧风:
还能这样
@牧风: 牛逼
现在很多程序安装后install都可以删除,不知道为啥wordpress非要留着- -

@wick:
留着备用
好文,收藏!
@露兜: 谢谢,话说怎么留了个没头像的邮箱。。
@kn007: 这才显得个性
@露兜:
进审核了。
昨天阿里云拦截到一百多次攻击~~主要是写入webshell攻击跟SQL注入攻击~/plus/recommend.php、data/cache/t.php、plus/erraddsave.php、/plus/download.php被干的最多~~

@wick: 这么惨,我最近有伙计也被攻击了,现在还处在攻击状态呢。我也被攻击了。
@kn007: 怎么看攻击
数据库用户被人给删除了~真是醉了~~~是阿里云不安全还是wdcp不安全啊~我擦~
@wick: 不要随便用面板。特别是国内的。
@kn007: 开始是不打算用的~~后来装他的环境就集成了~~~
刚看日志是WDCP被人登录进去了

@wick:
用国产就这结果...
@kn007: 只是删除数据库用户名还好~重新加个就没事了~刚定了个RDS~回头搬迁进去~~

@wick:
@kn007: 你用的保罗的哪个配置?
@wick: 定制的。。。3 核 4 G
@kn007: 这个高端~~

@wick:
