Nginx 轻松屏蔽恶意密码猜测

密码猜测
密码猜测

相信很多人用wordpress都有这样的情况,如果你的密码不够强度,被人这样天天猜,迟早要被破。

当然wordpress是不会主动通知你的,我们可以在主题的Function.php文件内加入如下代码来实现这个功能(前提是你的php要配置发信模块)

当然这个功能只是起到了提示作用,最终如何限制访问来源还是需要你自己配置的。

你可以使用nginx的ua判断,或者ip判断等等信息来确认访问者身份后返回正确的信息。

/*****************************************************
函数名称:wp_login_failed_notify v1.0 by DH.huahua.
函数作用:有错误登录wp后台就会email通知博主
******************************************************/
function wp_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');

为了最大程度的减少恶意破解,这里我用到了nginx的ua检测,如果返回正确的ua信息,那么显示我们的正确页面,如果返回的信息不对,那么只能对不起,页面不存在!

当然你也可以配置多个访问信息,例如页面包含wp-admin、phpadmin这些内容它都会检测用户登录来源,如果不对直接无信息返回,那么恶意程序的猜测就没用了。

在NGINX的配置文件的Server段内加入

#login block

# 判断访问地址
if ($request ~* "(wp-login.php|wp-admin|pma|phpmyadmin|admin|login)"){
        set $theme "o";
    }

# 判断浏览器UA是否包含我们的信息,正确就直接返回正常页面,不正确就直接显示404页面
if ($http_user_agent !~* "(jalena|loginua)"){
        set $theme "${theme}k";
    }
if ($theme = "ok") {
        return  404;
    }

这样之后我们需要重启nginx服务,然后你再试试吧!

如何获取UA:

  1. Era 2014.04.12 2:34pm

    判断ua指的是?
    ua判断显示的信息是什么呢?

  2. 马克互联网 2014.03.29 7:25pm

    坏人无处不在,有这招就能提防下

HTML tag cannot be used in this comment.