在带有用户系统的应用中,都有用户注册的步骤,为了加强用户系统的安全,我们需要对用户的密码进行强度验证.
这边记录下我实现的一个方案.
第一步:
在input那边绑定onblur
事件,在用户输入完成的时候,进行验证
<input type="password" name="password" onblur="checkPass();" />
第二步:
Javascript函数:checkPass
<script type="text/javascript">
function checkPass()
{
var pass = $('input[name=password]').val();
if (pass.length <6) {
alert('密码长度至少6位');
}
var url = "http://www.test.com/Home/Index/checkPass";
$.post(url,{password:pass},function(result){
switch (result){ //根据返回的密码强弱权重来在前端提示
case 1:
str = '弱';
break;
case 2:
str = '中';
break;
case 3:
str = '强';
break;
default:
str = '弱';
}
alert(str);
});
}
</script>
最后
PHP代码部分
public function checkPass()
{
$password = Yii::$app->request->post('password');
$patterns = [
['pattern'=>'/\d+/','weight'=>1], //纯数字密码权重为1
['pattern'=>'/[a-z]+/','weight'=>1], //纯小写字母权重为1
['pattern'=>'/[A-Z]+/','weight'=>2], //纯大写字母权重为2
['pattern'=>'/[^\w\s]+/','weight'=>3],//特殊字符权重为3
];
$weight = 0;
foreach ($patterns as $key=>$val) {
if (preg_match($val['pattern'],$password)) {
$weight += $val['weight']; //正则表达式去匹配密码,测试密码最终的权重为多少
}
}
//根据正则表达式匹配获得的权重,获得密码强度等级
switch ($weight) {
case '1':
$result = 1;
break;
case '2':
$result = 2;
break;
case '3':
$result = 2;
break;
default:
$result = 3;
break;
}
echo json_encode(['weight'=>$result]);
exit;
}
密码强度验证的也可以在Js中去书写,权重的分配根据自己的需求去设置. .