kn007的个人博客
♥ You are here: Home > 软件与网络 > php > 如何保护WordPress的wp-login.php和wp-cron.php

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

by | 74 Comments

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

secure-site-from-hackers
下面就简单以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

donate
有所帮助?
Comments
74 Comments立即评论
  1. LV7
    回复

    看过网上有一篇文章 修改wordpress网站的wp-admin目录 也能实现类似的效果

    1. MOD
      回复

      @World: 修改这些主要是怕WP自动更新时,又要去改,岂不是麻烦 :o

  2. LV7
    回复

    看过网上有一篇文章 修改wordpress网站的wp-admin目录 也能实现类似的效果 不过效果就没有你这篇文章来的全面了

    1. MOD
      回复

      @World: :lol: :mrgreen: 我最近被人攻击了,老是往这3个方向来。wp-cron.php很快就带来高负载。

    2. LV7
      回复

      @kn007: 被攻击说明有价值 :lol: :lol: :lol: 哈哈
      你上面写得方法 可以直接解决WP升级覆盖的问题了 赞一个

    3. MOD
      回复

      @World: 哈哈,谢谢,收到主题了~已经收藏。 :cool:

  3. LV4
    回复

    我来了 就是瞅瞅!

    1. MOD
      回复

      @所谓刚子: :lol: 欢迎

  4. LV4
    回复

    看不懂,这是混个脸熟。

    1. MOD
      回复

      @从良未遂: 欢迎~ :idea:

  5. 回复

    有发现一个和我的主题一样的网站,缘分啊

    1. MOD
      回复

      @lawrui: 额 :o

  6. LV2
    回复

    wp-config.php 我要设置下, 登录这里准备换成扫码登录了

    1. MOD
      回复

      @牧风: :o :o 还能这样

    2. LV5
      回复

      @牧风: 牛逼

  7. LV6
    回复

    现在很多程序安装后install都可以删除,不知道为啥wordpress非要留着- - :o :o

    1. MOD
      回复

      @wick: :mrgreen: 留着备用

  8. 回复

    好文,收藏!

    1. MOD
      回复

      @露兜: 谢谢,话说怎么留了个没头像的邮箱。。 :o

    2. 回复

      @kn007: 这才显得个性

    3. MOD
      回复

      @露兜: :o 进审核了。

  9. LV6
    回复

    昨天阿里云拦截到一百多次攻击~~主要是写入webshell攻击跟SQL注入攻击~/plus/recommend.php、data/cache/t.php、plus/erraddsave.php、/plus/download.php被干的最多~~ :o :o

    1. MOD
      回复

      @wick: 这么惨,我最近有伙计也被攻击了,现在还处在攻击状态呢。我也被攻击了。

    2. LV5
      回复

      @kn007: 怎么看攻击

  10. LV6
    回复

    数据库用户被人给删除了~真是醉了~~~是阿里云不安全还是wdcp不安全啊~我擦~

    1. MOD
      回复

      @wick: 不要随便用面板。特别是国内的。

    2. LV6
      回复

      @kn007: 开始是不打算用的~~后来装他的环境就集成了~~~ :x :x 刚看日志是WDCP被人登录进去了 :x :x

    3. MOD
      回复

      @wick: :o 用国产就这结果...

    4. LV6
      回复

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

    5. MOD
      回复
    6. LV6
      回复

      @kn007: 你用的保罗的哪个配置?

    7. MOD
      回复

      @wick: 定制的。。。3 核 4 G

    8. LV6
      回复

      @kn007: 这个高端~~ :mrgreen: :mrgreen: :mrgreen:

    9. MOD
      回复

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: