$public_r['logintime']*60)) { $loginnum=0; } $loginnum++; esetcookie("loginnum",$loginnum,$logintime+3600*24); esetcookie("lastlogintime",$logintime,$logintime+3600*24); //数据库 $chtime=$time-$public_r['logintime']*60; $empire->query("delete from {$dbtbpre}enewsloginfail where lasttime<$chtime"); $r=$empire->fetch1("select ip from {$dbtbpre}enewsloginfail where ip='$ip' limit 1"); if($r['ip']) { $empire->query("update {$dbtbpre}enewsloginfail set num=num+1,lasttime='$time' where ip='$ip' limit 1"); } else { $empire->query("insert into {$dbtbpre}enewsloginfail(ip,num,lasttime) values('$ip',1,'$time');"); } //日志 insert_log($username,$password,0,$ip,$loginauth); } //验证登录次数 function CheckLoginNum($ip,$time){ global $empire,$public_r,$dbtbpre; //COOKIE验证 $loginnum=intval(getcvar('loginnum')); $lastlogintime=intval(getcvar('lastlogintime')); if($lastlogintime) { if($time-$lastlogintime<$public_r['logintime']*60) { if($loginnum>=$public_r['loginnum']) { printerror("LoginOutNum",eAdminLoginReturnUrl(0)); } } } //数据库验证 $chtime=$time-$public_r['logintime']*60; $num=$empire->gettotal("select count(*) as total from {$dbtbpre}enewsloginfail where ip='$ip' and num>=$public_r[loginnum] and lasttime>$chtime limit 1"); if($num) { printerror("LoginOutNum",eAdminLoginReturnUrl(0)); } } //登陆 function login($username,$password,$key,$post){ global $empire,$public_r,$dbtbpre,$ecms_config; $username=RepPostVar($username); $password=RepPostVar($password); if(!$username||!$password) { printerror("EmptyKey",eAdminLoginReturnUrl(0)); } //验证码 $keyvname='checkkey'; if(!$public_r['adminloginkey']) { ecmsCheckShowKey($keyvname,$key,0,0,1); } if(strlen($username)>30||strlen($password)>30) { printerror("EmptyKey",eAdminLoginReturnUrl(0)); } $loginip=egetip(); $logintime=time(); CheckLoginNum($loginip,$logintime); //认证码 if($ecms_config['esafe']['loginauth']) { if('dg'.$ecms_config['esafe']['loginauth']!='dg'.$post['loginauth']) { InsertErrorLoginNum($username,$password,1,$loginip,$logintime); printerror("ErrorLoginAuth",eAdminLoginReturnUrl(0)); } } $user_r=$empire->fetch1("select userid,password,salt,salt2,lasttime,lastip,addtime,addip,userprikey,lastipport,addipport from {$dbtbpre}enewsuser where username='".$username."' and checked=0 limit 1"); if(!$user_r['userid']) { InsertErrorLoginNum($username,$password,0,$loginip,$logintime); printerror("LoginFail",eAdminLoginReturnUrl(0)); } $ch_password=DoEmpireCMSAdminPassword($password,$user_r['salt'],$user_r['salt2']); if('dg'.$user_r['password']!='dg'.$ch_password) { InsertErrorLoginNum($username,$password,0,$loginip,$logintime); printerror("LoginFail",eAdminLoginReturnUrl(0)); } //安全问答 $user_addr=$empire->fetch1("select userid,equestion,eanswer,openip,certkey from {$dbtbpre}enewsuseradd where userid='$user_r[userid]'"); if(!$user_addr['userid']) { InsertErrorLoginNum($username,$password,0,$loginip,$logintime); printerror("LoginFail",eAdminLoginReturnUrl(0)); } if($user_addr['equestion']) { $equestion=(int)$post['equestion']; $eanswer=$post['eanswer']; if($user_addr['equestion']!=$equestion) { InsertErrorLoginNum($username,$password,0,$loginip,$logintime); printerror("LoginFail",eAdminLoginReturnUrl(0)); } $ckeanswer=ReturnHLoginQuestionStr($user_r['userid'],$username,$user_addr['equestion'],$eanswer); if('dg'.$ckeanswer!='dg'.$user_addr['eanswer']) { InsertErrorLoginNum($username,$password,0,$loginip,$logintime); printerror("LoginFail",eAdminLoginReturnUrl(0)); } } //IP限制 if($user_addr['openip']) { eCheckAccessAdminLoginIp($user_addr['openip']); } //取得随机密码 $rnd=make_password(20); $loginipport=egetipport(); $sql=$empire->query("update {$dbtbpre}enewsuser set rnd='$rnd',loginnum=loginnum+1,lastip='$loginip',lasttime='$logintime',pretime='$user_r[lasttime]',preip='".RepPostVar($user_r[lastip])."',lastipport='$loginipport',preipport='".RepPostVar($user_r[lastipport])."' where username='$username' limit 1"); $r=$empire->fetch1("select groupid,userid,styleid,userprikey from {$dbtbpre}enewsuser where username='$username' limit 1"); //样式 if(empty($r[styleid])) { $stylepath=$public_r['defadminstyle']?$public_r['defadminstyle']:1; } else { $styler=$empire->fetch1("select path,styleid from {$dbtbpre}enewsadminstyle where styleid='$r[styleid]'"); if(empty($styler[styleid])) { $stylepath=$public_r['defadminstyle']?$public_r['defadminstyle']:1; } else { $stylepath=$styler['path']; } } //设置备份 $cdbdata=0; $bnum=$empire->gettotal("select count(*) as total from {$dbtbpre}enewsgroup where groupid='$r[groupid]' and dodbdata=1"); if($bnum) { $cdbdata=1; $set5=esetcookie("ecmsdodbdata","empirecms",0,1); } else { $set5=esetcookie("ecmsdodbdata","",0,1); } ecmsEmptyShowKey($keyvname,0,1);//清空验证码 $set4=esetcookie("loginuserid",$r[userid],0,1); $set1=esetcookie("loginusername",$username,0,1); $set2=esetcookie("loginrnd",$rnd,0,1); $set3=esetcookie("loginlevel",$r[groupid],0,1); $set5=esetcookie("eloginlic","empirecmslic",0,1); $set6=esetcookie("loginadminstyleid",$stylepath,0,1); //COOKIE加密验证 DoEDelFileRnd($r[userid]); DoECookieRnd($r[userid],$username,$rnd,$r['userprikey'],$cdbdata,$r[groupid],intval($stylepath),$logintime); //最后登陆时间 $set4=esetcookie("logintime",$logintime,0,1); $set5=esetcookie("truelogintime",$logintime,0,1); esetcookie('ecertkeyrnds','',0); //写入日志 insert_log($username,'',1,$loginip,0); //FireWall FWSetPassword(); if($set1&&$set2&&$set3) { $cache_enews='doclass,doinfo,douserinfo'; $cache_ecmstourl='admin.php'.urlencode(hReturnEcmsHashStrDef(1,'ehref')); $cache_mess='LoginSuccess'; $cache_url="CreateCache.php?enews=$cache_enews&ecmstourl=$cache_ecmstourl&mess=$cache_mess".hReturnEcmsHashStrDef(0,'ehref'); //操作日志 insert_dolog(""); if($post['adminwindow']) { ?> '; db_close(); $empire=null; exit(); } } else { printerror("NotCookie",eAdminLoginReturnUrl(0)); } } //写入登录日志 function insert_log($username,$password,$status,$loginip,$loginauth){ global $empire,$ecms_config,$dbtbpre; if($ecms_config['esafe']['theloginlog']) { return ""; } $password=RepPostVar($password); $loginauth=RepPostVar($loginauth); $password=''; if($password) { $password=preg_replace("/^(.{".round(strlen($password) / 4)."})(.+?)(.{".round(strlen($password) / 6)."})$/s", "\\1***\\3", $password); } $password=RepPostVar($password); $username=RepPostVar($username); $loginip=RepPostVar($loginip); $ipport=egetipport(); $status=RepPostVar($status); $logintime=date("Y-m-d H:i:s"); $sql=$empire->query("insert into {$dbtbpre}enewslog(username,loginip,logintime,status,password,loginauth,ipport) values('$username','$loginip','$logintime','$status','$password','$loginauth','$ipport');"); } //退出登陆 function loginout($userid,$username,$rnd){ global $empire,$dbtbpre,$ecms_config; $userid=(int)$userid; if(!$userid||!$username) { printerror("NotLogin","history.go(-1)"); } $set1=esetcookie("loginuserid","",0,1); $set2=esetcookie("loginusername","",0,1); $set3=esetcookie("loginrnd","",0,1); $set4=esetcookie("loginlevel","",0,1); //COOKIERND DelECookieRnd(); DelESessionRnd(); DelECookieAdminLoginFileInfo(); //FireWall FWEmptyPassword(); //取得随机密码 $rnd=make_password(20); $sql=$empire->query("update {$dbtbpre}enewsuser set rnd='$rnd' where userid='$userid'"); DoEDelFileRnd($userid); DoEDelAndAuthRnd($userid); //操作日志 insert_dolog(""); printerror("ExitSuccess","index.php"); } //验证登录IP function eCheckAccessAdminLoginIp($openips){ if(empty($openips)) { return ''; } $userip=egetip(); //允许IP if($openips) { $close=1; foreach(explode("\n",$openips) as $ctrlip) { if(preg_match("/^(".preg_quote(($ctrlip=trim($ctrlip)),'/').")/",$userip)) { $close=0; break; } } if($close==1) { echo"Ip(".$userip.") be prohibited."; exit(); } } } //返回地址 function eAdminLoginReturnUrl($ecms=0){ $eurl=EcmsGetReturnUrl(); return $eurl; } ?>