云优CMS官方论坛_开源城市分站管理系统
搜索
 找回密码
 立即注册
查看: 417|回复: 1

【功能拓展】yunucms判断后台登陆错误次数限制

[复制链接]

5

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2019-7-22 16:03:47 | 显示全部楼层 |阅读模式
后端目录如果暴露了一会 就会有一些不法的暴力破解尝试,在这儿,分享给大家一个yunucms判断登陆错误次数限制的方法。
如果大家想修改后端目录的方法可以参考这篇文章。
http://www.nfishinn.com/jingyanxd/27.html
站点目录找到 \app\admin\controller 下的 Index.php
大约在135 行 doLogin 方法中 覆盖此方法。
  1. //登录操作
  2.     public function doLogin()
  3.     {
  4.         if (request()->isAjax()) {
  5.             $username = input("param.username");
  6.             $password = input("param.password");

  7.             if (config('verify_type') == 1) {
  8.                 $code = input("param.code");
  9.             }
  10.             $db = Db::name('admin');
  11.             $result = $this->validate(compact('username', 'password'), 'AdminValidate');
  12.             if(true !== $result){
  13.                 return json(['code' => -5, 'data' => '', 'msg' => $result]);
  14.             }
  15.                         //判断登陆错误限制次数提示开始
  16.                         $ip   = request()->ip();//获取用户的ip
  17.                         $time = time()-5*60;//5*60秒(5分钟)
  18.                         $count=Db::name('log')->where('ip',$ip)->where('status',2)->where('add_time','>=',$time)->count();
  19.                         //如果超过5次就提示
  20.                         if($count>=5){
  21.                                 return json(['code' => -1, 'data' => '', 'msg' => '登陆次数过多请稍后再试']);
  22.                         }
  23.                         //判断登陆错误限制次数提示结束
  24.                         
  25.             $hasUser = $db->where(['username'=>$username])->find();
  26.             if(empty($hasUser)){
  27.                                 writelog(0,$username,'用户【'.$username.'】登录失败:该账号被禁用',2);
  28.                 return json(['code' => -1, 'data' => '', 'msg' => '管理员不存在']);
  29.             }

  30.             if(md5(md5($password).config('auth_key')) != $hasUser['password']){
  31.                 writelog($hasUser['id'],$username,'用户【'.$username.'】登录失败:密码错误',2);
  32.                 return json(['code' => -2, 'data' => '', 'msg' => '账号或密码错误']);
  33.             }

  34.             if(1 != $hasUser['status']){
  35.                 writelog($hasUser['id'],$username,'用户【'.$username.'】登录失败:该账号被禁用',2);
  36.                 return json(['code' => -6, 'data' => '', 'msg' => '该账号被禁用']);
  37.             }

  38.             //获取该管理员的角色信息
  39.             $user = new UserType();
  40.             $info = $user->getRoleInfo($hasUser['groupid']);
  41.             session('admin_username', $username);
  42.             session('admin_uid', $hasUser['id']);
  43.             session('groupid', $hasUser['groupid']);
  44.             session('rolename', $info['title']);
  45.             session('rule', $info['rules']);
  46.             session('name', $info['name']);

  47.             session('last_login_ip', $hasUser['last_login_ip']);
  48.             session('last_login_time', date('Y-m-d H:i:s', $hasUser['last_login_time']));
  49.       
  50.             //更新管理员状态
  51.             $param = [
  52.                 'loginnum' => $hasUser['loginnum'] + 1,
  53.                 'last_login_ip' => request()->ip(),
  54.                 'last_login_time' => time()
  55.             ];

  56.             $db->where(['id'=>$hasUser['id']])->update($param);
  57.             writelog($hasUser['id'], session('admin_username'), '用户【'.session('admin_username').'】登录成功', 1);
  58.             return json(['code' => 1, 'data' => url('index/index'), 'msg' => '登录成功!']);
  59.         }
  60.     }
复制代码
效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

5

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2019-7-22 16:08:24 | 显示全部楼层
这个是单独拿出来的代码
  1. //判断登陆错误限制次数提示开始
  2.                         $ip   = request()->ip();//获取用户的ip
  3.                         $time = time()-5*60;//5*60秒(5分钟)
  4.                         $count=Db::name('log')->where('ip',$ip)->where('status',2)->where('add_time','>=',$time)->count();
  5.                         //如果超过5次就提示
  6.                         if($count>=5){
  7.                                 return json(['code' => -1, 'data' => '', 'msg' => '登陆次数过多请稍后再试']);
  8.                         }
  9.                         //判断登陆错误限制次数提示结束
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|云优CMS官方论坛

GMT+8, 2019-10-17 13:24 , Processed in 0.062154 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表