本来对于登陆保护是没怎么注意的,最近在好几个博客都看到有猜解后台用户名密码的,让博主不得不重视这个问题。博主用的密码的强度还是不差的,但是也顶不住常年累月的猜解撒。

 title=

好吧,先给出登陆错误邮件提示的代码。

1、代码来自《万恶的wordpress密码猜测

/***************************************************** 
    函数名称:wp_login_failed_notify v1.0 by DH.huahua. 
    函数作用:有错误登录wp后台就会email通知博主 
    ******************************************************/ 
    functionwp_login_failed_notify(){  
        date_default_timezone_set('PRC');  
        $admin_email= get_bloginfo ('admin_email');  
        $to=$admin_email;  
        $subject= '你的博客空间登录错误警告';  
        $message= '<p>你好!你的博客空间(' . get_option("blogname") . ')有登录错误!' .  
            '<p>请确定是您自己的登录失误,以防别人攻击!登录信息如下:' .  
            '<p>登录名:' .$_POST['log'] . '<p>' .  
            '<p>登录密码:' .$_POST['pwd'] . '<p>' .  
            '<p>登录时间:' .date("Y-m-d H:i:s") . '<p>' .  
            '<p>登录IP:' .$_SERVER['REMOTE_ADDR'] . '<p>';  
        $wp_email= 'no-reply@' . preg_replace('#^www\.#','',strtolower($_SERVER['SERVER_NAME']));  
        $from="From: \"". get_option('blogname') ."\" <$wp_email>";  
        $headers="$from\nContent-Type: text/html; charset=". get_option('blog_charset') ."\n";  
        wp_mail($to,$subject,$message,$headers);  
    }  
    add_action('wp_login_failed', 'wp_login_failed_notify');

2、以上代码放到主题的functions.php就可以了。

3、请注意,代码将错误提示的邮件发送到的邮箱不是管理员资料里边的邮箱,而是站点通知的邮箱。

 title=

4、当然,这仅仅是提醒而已,当你收到的提示信息过多你就不得不考虑动点手脚防止别人猜解你的密码。

WordPress后台登录添加数学验证码

1、这个够狠,可以直接杜绝post猜解的,不过博主不喜欢登陆的时候非得填个验证码。

//后台登陆数学验证码
function myplugin_add_login_fields() {
    //获取两个随机数, 范围0~9
    $num1=rand(0,9);
    $num2=rand(0,9);
    //最终网页中的具体内容
    echo "<p><label for='math' class='small'>验证码</label><br /> $num1 + $num2 = ?<input type='text' name='sum' class='input' value='' size='25' tabindex='4'>" . "<input type='hidden' name='num1' value='$num1'>" . "<input type='hidden' name='num2' value='$num2'></p>";
}
add_action('login_form','myplugin_add_login_fields');
function login_val() {
    $sum=$_POST['sum'];//用户提交的计算结果
    switch($sum){
        //得到正确的计算结果则直接跳出
        case $_POST['num1']+$_POST['num2']:break;
        //未填写结果时的错误讯息
        case null:wp_die('错误: 请输入验证码.');break;
        //计算错误时的错误讯息
        default:wp_die('错误: 验证码错误,请重试.');
    }
}
add_action('login_form_login','login_val'); 

2、同样是放到主题的functions.php

3、实际效果如下。

 title=

wp-login.php添加相关参数

1、但是这样还是能手工猜解或者可以使用软件计算验证码,这时候可以对wp-login.php动点手脚。

2、先用编辑器打开wp-login.php,然后找到如下代码。大约50~60行的样子。

if($shake_error_codes&&$wp_error->get_error_code() && in_array($wp_error->get_error_code(),$shake_error_codes) )
    add_action( 'login_head', 'wp_shake_js', 12 );
?>

3、在上面的代码后边添加如下代码:

<?php
    if($_GET["name"]!="sb")
        header('Location:http://www.baidu.com/');
?>

4、这样登陆地址就变成了wp-login.php?name=sb酱紫。但是修改程序文件的话只要程序升级了就前功尽弃,这时候我们可以通过WordPress的钩子(参考《WordPress登陆文件wp-login.php添加相关参数,安全有保障》)

 add_action('login_enqueue_scripts','login_protection');
    functionlogin_protection(){
       if($_GET['name'] != 'sb')header('Location: http://www.baidu.com/');
    }

使用.htaccess保护wp-login.php

1、htaccess大法好,就是需要服务器是apache。以下参考自《WordPress防暴力破解:安全插件和用.htpasswd保护WordPress控制面板

2、htpasswd在线生成

http://www.htaccesstools.com/htpasswd-generator/

3、.htpasswd后缀名在Windows很难创建,可以下载示例:(没了,百度网盘不允许共享)

4、先到.htpasswd在线生成页面中填写用户名和密码。

 title=

4、提交后会得到一串代码。

 title=

5、将这个代码复制到你的.htpasswd文件中,保存。没有的话自己创建一个。上传到你的网站的目录中。

6、然后将下列代码添加到你的wp-admin目录下的.Htaccess文件中,没有该文件可以自己创建一个。

<Files wp-login.php>
    AuthUserFile /home/wwwroot/lovexinlei/public_html/.htpasswd
    AuthType Basic
    AuthName "restricted"
    Order Deny,Allow
    Deny from all
    Require valid-user
    Satisfy any
</Files> 

7、其中AuthUserFile是填写你的.htpasswd文件绝对路径,你要改成你自己的。

8、这样当别人要访问你的wp-login.php时就会弹出要求用户名和密码验证的提示。

9、如果你要对其它的文件实现控制,请替换你自己的文件即可。