网站建设

防止WordPress后台被暴力破解

timhbw · 4月6日 · 2017年 · 261次已读

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

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

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

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

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 后面的文件路径:
    location = /wp-login.php {
    auth_basic "Restricted";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index wp-login.php;
    include fastcgi.conf;
    }
  • 重载 Ningx ,让配置生效:service nginx reload

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

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

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