WordPress作为使用人数最多的博客系统,一直是大家关注的焦点,不安好心的人找漏洞,钻空子爆破别人网站的事情也经常也发生,如果你的密码设置的过于简单,比如用户名还是默认的admin,那就危险了,密码设置最好也包含数字,大小写字母,标点符号等,提高安全系数。
我的博客最近也一直被别人暴力登录,由于我设置过登录错误邮件提醒,所以邮箱收到一大堆邮件,手机从邮箱一直从中午推送消息,到晚上才消停。还好登录的次数不够频繁,几秒一次,所以服务器并没有宕机。
索性安装几个插件来防止,就搜索几个用的人数比较多的安装,发现并没有什么效果,插件功能太多,华而不实,而且插件安装过多影响前后台速度,于是全部卸载。
网上搜索网一些文章后,结合起来。自己理出几个防止恶意登录的思路:
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"属性
- SMTP发送邮件,注意设置SMTP服务区
- 博客后台登录失败时发送邮件通知管理员
// 博客后台登录失败时发送邮件通知管理员 function wp_login_failed_notify() { date_default_timezone_set('PRC'); $admin_email = get_bloginfo('admin_email'); $to = $admin_email; $subject = '【登录失败】有人使用了错误的用户名或密码登录『' . get_bloginfo('name') . '』'; $message = '<span style="color:red; font-weight: bold;">『' . get_bloginfo('name') . '』有一条登录失败的记录产生,若登录操作不是您产生的,请及时注意网站安全!</span><br /><br />'; $message .= '登录名:' . $_POST['log']; $message .= '<br />尝试的密码:' . $_POST['pwd']; $message .= '<br />登录的时间:' . date("Y-m-d H:i:s"); $message .= '<br />登录的 IP:' . $_SERVER['REMOTE_ADDR']; $message .= '<br /><br />'; $message .= '您可以: <a href="' . 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');