본문 바로가기
개발/JAVA

보안점검 조치 패스워드 검증(연속된 숫자/문자, 영문대소문자,특수문자포함 9~20자리 패스워드 검증)

by Strong_옹이 2021. 5. 28.
728x90
반응형

비밀번호 조건 

  1. 0~9까지 숫자가 최소 1개 이상이면서 영문대소문자 최소 1개 이상 포함, 특수문자 최소 1개 이상 포함되어

    공백이 없고 9~20자리

  2. 연속된 숫자 4자리, 동일 문자 4자리 검증

 

        //패스워드 검증
        if (checkPw(newPwd) == false){
        	map.put("message", "비밀번호는 공백 없는 영문 대소문자, 특수문자, 숫자를 포함한 9~20자리 암호로 설정해주세요.");
        	map.put("resultData", false);
        	return map;
        }
        //연속된 숫자, 문자 4자리 검증
        if ( continuousPw(newPwd) ) { //트루면 연속된 숫자 또는 문자열이 있음
        	map.put("message", "비밀번호에 연속된 숫자 또는 문자열이 존재합니다.");
        	map.put("resultData", false);
        	return map;
        }

 

1. 패스워드 검증

  - 입력된 패스워드 null체크

  - 자리수가 20자리가 넘는지 체크

  - 정규식

    +  (?=.*[0-9]) 0~9까지 숫자 최소 한개
    + (?=.*[a-zA-Z]) 영문 대소문자 최소 한개
    + (?=.*\\W) 특수문자 최소 한개
    + (?=.\\S+$) 공백 불가
    + .{9,20} 선행 4가지 표현식(숫자, 영문대소문자, 특수문자, 공백불가)에 맞는 9~20자리 문자열
    + (?=.*?[#?!@$%^&*-]) 등록가능한 특수문자

 

  - checkPw 값이 트루면 통과 false면 얼럿표출 

	//패스워드 검증
	private boolean checkPw(String inputPw) {
		if(inputPw == null || inputPw.equals("")) {
			return false;
		}
		if (inputPw.length() > 20) {
			return false;
		}
		boolean checked = false;
		try {
			String regExp = "^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=.\\S+$).{9,20}$";
			checked = inputPw.matches(regExp);
			
		}catch (Exception e)  {
			return false;
		}
		return checked;
	}

 

 

2. 연속된 숫자, 문자 4자리 검증 - 패스워드를 한자리씩 잘라 포문으로 연속된 숫자나 문자가 있는지 확인 

없으면 true 있으면 false

	//연속된 문자 숫자4자리가 포함되어있는지 검증
	private boolean continuousPw(String inputPw) {
		int o = 0;
		int d = 0;
		int p = 0;
		int n = 0;
		int limit = 4;
		
		for (int i = 0; i < inputPw.length(); i++ ) {
			char tmpVal = inputPw.charAt(i);
			if (i > 0 && (p = o - tmpVal) > -2 && (n = p == d ? n + 1 : 0 ) > limit - 3 ) {
				return true;
			}
			d = p;
			o = tmpVal;
		}
		return false;
	}
728x90
반응형

댓글