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);
    		}
            }
        }
    
  • 相关阅读:
    lucene 3.0.2 search 各种各样的Query类型
    lucene 3.0.2 中文分词
    java 文件读写
    java 从args[]中赋值和程序直接赋值不一样?
    java 中文转换成Unicode编码和Unicode编码转换成中文
    Java栈与堆一篇好文
    lucene 3.0.2 操作进阶
    Lucene实战(第2版)》
    java工程包的命名(-dev.jar,-javadoc.jar,jar)
    POJ 3304 Segments (线段和直线相交 + 思维)
  • 原文地址:https://www.cnblogs.com/djwhome/p/12167633.html
Copyright © 2011-2022 走看看