💚 어떤 기능인가요?
EmailVerificationService 의 인증번호에 문제가 세 가지 있다.
1. 예측 가능한 난수
Stringcode = String.valueOf((int)(Math.random() * 900000) + 100000);
Math.random() 은 선형 합동 생성기다. 이전 출력에서 다음 값을 예측할 수 있어
인증 수단으로 쓰면 안 된다.
2. 시도 횟수 제한 없음
6자리 숫자라 후보가 90만 개뿐인데 verifyCode 가 시도를 세지 않는다.
유효시간 5분 안에 전수 조회가 가능하다.
3. 재발송 간격 없음
같은 주소로 메일을 무한정 보낼 수 있다. 발송 비용이 들고 수신자에게는 그대로 스팸이 된다.
부수적으로 코드 비교가 String.equals 이고, 인증 링크에 운영 IP 가 하드코딩돼 있다.
✅ To Dos
💚 어떤 기능인가요?
EmailVerificationService의 인증번호에 문제가 세 가지 있다.1. 예측 가능한 난수
Math.random()은 선형 합동 생성기다. 이전 출력에서 다음 값을 예측할 수 있어인증 수단으로 쓰면 안 된다.
2. 시도 횟수 제한 없음
6자리 숫자라 후보가 90만 개뿐인데
verifyCode가 시도를 세지 않는다.유효시간 5분 안에 전수 조회가 가능하다.
3. 재발송 간격 없음
같은 주소로 메일을 무한정 보낼 수 있다. 발송 비용이 들고 수신자에게는 그대로 스팸이 된다.
부수적으로 코드 비교가
String.equals이고, 인증 링크에 운영 IP 가 하드코딩돼 있다.✅ To Dos
Math.random()→SecureRandom