zoukankan      html  css  js  c++  java
  • 渗透测试人员发现用户可无限输入密码次数,超过5次未锁定用户,存在暴力破解风险。解放方案:限制每个输入的用户名(不管存不存在该账户)登陆失败次数不超过5次,超过则锁定该用户

    漏洞描述
    渗透测试人员发现用户可无限输入密码次数,超过5次未锁定用户,存在暴力破解风险。
    漏洞建议
    限制每个输入的用户名(不管存不存在该账户)登陆失败次数不超过5次,超过则锁定该用户。
    解决方案:
    把登陆的用户名 如果输错一次,那么就写入缓存memcache中,num+1,key是用户名,value是登陆失败次数,如果超过5次,设置过期时间

    所用语言php
    框架ci
                            /**
    			 * 2020.1.8新增 限制每个输入的用户名(不管存不存在该账户)登陆失败次数不超过5次,超过则锁定该用户。 写入到缓存中,设置过期时间
    			 */
    			$this->load->library('Memcached');
    			// 先去mem中判断该用户是否存在,看有几次登陆失败次数,如果超过5次,那么就返回 你的账户已经被锁定了,期限1天
    			$fail_num = $this->memcached->_get($username) ? $this->memcached->_get($username) : 0;
    
    			if ($fail_num >= 5){
    				$this->returnData('error','你的账户已经被锁定了!期限1天');
    			}
    
                            (empty($username) || !preg_match("/^[a-zA-Z0-9]{4,16}$/",$username)) ?($this->addMem($fail_num, $username)).  ($this->returnData('error','请输入正确的用户名!'))  : '';
                            (empty($password) || strlen($password) > 20 || strlen($password) < 5) ?  ($this->addMem($fail_num, $username)).($this->returnData('error','请输入正确的密码!')) : '';
                            (empty($result)) ? ($this->addMem($fail_num, $username)) . ($this->returnData('error','用户名或密码不正确'))   : '';
    
    	 /**
    	 * 封装的mem 锁定用户的公用方法
    	 */
    	private function addMem($fail_num, $username)
    	{
    		$this->load->library('Memcached');
    		if ($fail_num >= 5){
    			$this->memcached->_set($username,++$fail_num,3600*24);
    		} else {
    			$this->memcached->_set($username,++$fail_num);
    		}
            }
        }
    
  • 相关阅读:
    作为管理者的基本职责
    websocket接口自动化的封装
    locust性能测试的使用
    git的协作提交流程
    关于接口自动化的实施步骤
    K8S的组件梳理
    jenkins pipeline中,失败后获取异常不中断业务
    pipline在执行的docker镜像中添加hosts
    sonar搭建
    django
  • 原文地址:https://www.cnblogs.com/djwhome/p/12167633.html
Copyright © 2011-2022 走看看