防止WordPress后台被暴力破解

2017-04-0613:34:01 发表评论 955℃热度

WordPress作为使用人数最多的博客系统,一直是大家关注的焦点,不安好心的人找漏洞,钻空子爆破别人网站的事情也经常也发生,如果你的密码设置的过于简单,比如用户名还是默认的admin,那就危险了,密码设置最好也包含数字,大小写字母,标点符号等,提高安全系数。

防止WordPress后台被暴力破解

我的博客最近也一直被别人暴力登录,由于我设置过登录错误邮件提醒,所以邮箱收到一大堆邮件,手机从邮箱一直从中午推送消息,到晚上才消停。还好登录的次数不够频繁,几秒一次,所以服务器并没有宕机。

防止WordPress后台被暴力破解防止WordPress后台被暴力破解

索性安装几个插件来防止,就搜索几个用的人数比较多的安装,发现并没有什么效果,插件功能太多,华而不实,而且插件安装过多影响前后台速度,于是全部卸载。

网上搜索网一些文章后,结合起来。自己理出几个防止恶意登录的思路:

1.修改后台登录文件名

修改www.xxxxx.com/wp-admin或者www.xxxxx.com/wp-login.php页面名称,修改一个长一点,复杂一点,然后加入浏览器收藏夹,方便自己登陆。缺点就是如果在别的电脑登录,忘记文件夹名,就不方便了,还有WordPress更新后,也会覆盖文件,导致失效。

2.安装相应插件

便捷,后台一键安装,有可视化界面操作。但是我用起来不太管用,不知道大家怎么样。缺点就是安装插件太多拖慢前后台速度。插件有:Limit Login Attempts、WP-Ban、IP Blacklist Cloud、Wordfence Security、Better WP Security、BulletProof Security

3.修改配置文件

这个可以实现插件的功能,只不过没有界面,纯代码,因为插件也是通过修改wp-config.php文件达到目的的,一般修改主题的function.php或者修改wp-config.php文件代码实现自定义功能。

这里我给出Nginx服务器的配置,经过我测试有效(lnmp.org的环境):

  • 点击 生成密码 在这里输入你的用户名和密码(后面用于访问页面的密码,并不是wordpress的密码)后选择Crypt加密算法。在服务器上的/usr/local/nginx/conf目录下新建一个htpasswd文件,然后把刚才生成的账号密码粘贴到htpasswd文件中。
  • 编辑 /usr/local/nginx/conf/vhost/www.xxxxx.com.conf,加入如下代码,如果你htpasswd文件位置和我不一样,请修改auth_basic_user_file  后面的文件路径:
    1. location = /wp-login.php {
    2. auth_basic "Restricted";
    3. auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    4. fastcgi_pass unix:/tmp/php-cgi.sock;
    5. fastcgi_index wp-login.php;
    6. include fastcgi.conf;
    7. }
  • 重载 Ningx ,让配置生效:service nginx reload

这时候再访问https://www.huangbowei.com/wp-login.php或者https://www.huangbowei.com/wp-admin,就会出现弹出框,让你输入刚刚生成的账号密码,然后才能访问wordpress后台登录页面,有效防止别人恶意爆破。

防止WordPress后台被暴力破解

这里给出一些之前收集的好用的代码,省去安装插件:

    • 为正文所有链接添加target="_blank"属性
  1. //为正文所有链接添加target="_blank"属性
  2. function auto_blank($text) {
  3.     $return = str_replace('<a', '<a target="_blank"', $text);
  4.     return $return;
  5. }
  6. add_filter('the_content', 'auto_blank');
    • SMTP发送邮件,注意设置SMTP服务区
  1. //使用smtp发送邮件(请根据自己使用的邮箱设置SMTP)
  2.     add_action('phpmailer_init', 'mail_smtp');
  3.     function mail_smtp( $phpmailer ) {
  4.         $phpmailer->FromName = 'Timhbw博客'; //发件人名称
  5.         $phpmailer->Host = 'smtp.gmail.com'; //修改为你使用的邮箱SMTP服务器
  6.         $phpmailer->Port = 465; //SMTP端口
  7.         $phpmailer->Username = 'xxxxx@gmail.com'; //邮箱账户
  8.         $phpmailer->Password = 'xxxxxxxxxx'; //邮箱密码
  9.         $phpmailer->From = 'xxxxx@gmail.com'; //邮箱账户
  10.         $phpmailer->SMTPAuth = true;
  11.         $phpmailer->SMTPSecure = 'ssl'; //tls or ssl (port=25时->留空,465时->ssl)
  12.         $phpmailer->IsSMTP();
  13.     }
    • 博客后台登录失败时发送邮件通知管理员
  1. // 博客后台登录失败时发送邮件通知管理员
  2.    function wp_login_failed_notify()
  3.    {
  4.        date_default_timezone_set('PRC');
  5.        $admin_email = get_bloginfo('admin_email');
  6.        $to = $admin_email;
  7.        $subject = '【登录失败】有人使用了错误的用户名或密码登录『' . get_bloginfo('name') . '』';
  8.        $message = '<span style="color:red; font-weight: bold;">『' . get_bloginfo('name') . '』有一条登录失败的记录产生,若登录操作不是您产生的,请及时注意网站安全!</span><br /><br />';
  9.        $message .'登录名:' . $_POST['log'];
  10.        $message .'<br />尝试的密码:' . $_POST['pwd'];
  11.        $message .'<br />登录的时间:' . date("Y-m-d H:i:s");
  12.        $message .'<br />登录的 IP:' . $_SERVER['REMOTE_ADDR'];
  13.        $message .'<br /><br />';
  14.        $message .'您可以: <a href="' . get_bloginfo('url') . '" target="_target">进入' . get_bloginfo('name') . '»</a>';
  15.        wp_mail( $to, $subject, $message, "Content-Type: text/html; charset=UTF-8" );
  16.    }
  17.    add_action('wp_login_failed', 'wp_login_failed_notify');
avatar
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: