登录密码输错后时间限制、次数限制

此行为防止非法用户暴力破解密码对用户进行登录限制,其实nginx也可进行ip访问限制

方法一:

直接上代码吧 

<?php

$admin_id = session('ADMIN_ID');
$result =  $this->getByFieldData('id',$admin_id);
if(!empty($result['del'])){
return '用户已被删除!';
}
$db_pass = $result['password'];
$time = time();

//登录时间限制次数限制

if(bcsub($time,$result['checktime']) < 5*60){
//5分钟之内
if($result['degree']<4){
if($db_pass == md5($password)){
return true;
}
$this->execute('update bg_user set degree='.($result['degree']+1).' where id='.$result['id']);
return '您还有'.(4-$result['degree']).'次机会';
}else{
return '密码输错次数过多,请稍等5分钟再试';
}

}else{
//可以重新输入
$this->execute('update bg_user set degree=0 where id='.$result['id']);
$de = $this->execute('update bg_user set checktime='.$time.' where id='.$result['id']);
if($db_pass == md5($password)){
return true;
}else{
return '您还有5次机会';
}
}


方法二:

<!--防爆刷登录页-->
<?php

/*
*通过禁止IP频繁访问防止网站被防攻击代码
*design by www.scutephp.com
*/
header('Content-type: text/html; charset=utf-8');
$ip=$_SERVER['REMOTE_ADDR'];//获取当前访问者的ip
$logFilePath='./log/';//日志记录文件保存目录
$fileht='.htaccess2';//被禁止的ip记录文件
$allowtime=60;//防刷新时间
$allownum=10;//防刷新次数
$allowRefresh=2;//在允许刷新次数之后加入禁止ip文件中

// var_dump($ip);exit;
if(!file_exists($fileht)){
file_put_contents($fileht,'');
}
$filehtarr=@file($fileht);
if(in_array($ip."\r\n",$filehtarr)){

exit('警告:你的IP已经被禁止了!,若是客户请联系平台客服');

}
//加入禁止ip
$time=time();
$fileforbid=$logFilePath.'forbidchk.dat';
if(file_exists($fileforbid)){
if($time-filemtime($fileforbid)>30){
@unlink($fileforbid);
}else{
$fileforbidarr=@file($fileforbid);
if($ip==substr($fileforbidarr[0],0,strlen($ip))){
if($time-substr($fileforbidarr[1],0,strlen($time))>120){
@unlink($fileforbid);
}else if($fileforbidarr[2]>$allowRefresh){
file_put_contents($fileht,$ip."\r\n",FILE_APPEND);
@unlink($fileforbid);
}else{
$fileforbidarr[2]++;
file_put_contents($fileforbid,$fileforbidarr);
}
}
}
}
//防刷新
$str='';
$file=$logFilePath.'ipdate.dat';
if(!file_exists($logFilePath)&&!is_dir($logFilePath)){
mkdir($logFilePath,0777);
}
if(!file_exists($file)){
file_put_contents($file,'');
}
$uri=$_SERVER['REQUEST_URI'];//获取当前访问的网页文件地址
$checkip=md5($ip);
$checkuri=md5($uri);
$yesno=true;
$ipdate=@file($file);
foreach($ipdate as $k=>$v){
$iptem=substr($v,0,32);
$uritem=substr($v,32,32);
$timetem=substr($v,64,10);
$numtem=substr($v,74);
if($time-$timetem<$allowtime){
if($iptem!=$checkip){
$str.=$v;
}else{
$yesno=false;
if($uritem!=$checkuri){
$str.=$iptem.$checkuri.$time."\r\n";
}else if($numtem<$allownum){
$str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n";
}
else{
if(!file_exists($fileforbid)){
$addforbidarr=array($ip."\r\n",time()."\r\n",1);
file_put_contents($fileforbid,$addforbidarr);
}
file_put_contents($logFilePath.'forbided_ip.log',$ip.'--'.date('Y-m-d H:i:s',time()).'--'.$uri."\r\n",FILE_APPEND);
$timepass=$timetem+$allowtime-$time;
exit('警告:不要刷新的太频繁!');
}
}
}
}
if($yesno){
$str.=$checkip.$checkuri.$time."\r\n";
}
file_put_contents($file,$str);
?>
<!--防爆刷登录页-->

posted @ 2019-10-10 10:42  再一次我愿丢弃所有  阅读(1336)  评论(0编辑  收藏  举报