웹 취약점 / 계정 관리 문제 발생 / 대응 방안
Java Spring으로 개발되어 운영 중이던 웹 페이지에 대해서 취약점 점검을 했다.
그러고 취약점 점검 결과 pdf 파일을 받았다.
여러 취약점이 발견됐지만, 그중 하나가 "취약한 계정 관리"이다.
회원가입할 때 비밀번호 설정 규칙이 적용 안됐다는 것인데... 아무리 확인해도 규칙이 적용되었고,
규칙에 맞지 않으면 alert 경고 창이 뜬다....
한참을 고민하다가, 사이버 안전센터에 연락을 취해보았다.
나: "제가 확인한 결과, 규칙에 맞지 않으면 alert 창이 뜨고, 회원가입이 불가능합니다. 어느 부분을 확인해 보아야 할까요?"
사이버 안전센터의 답변은
1. 처음 회원가입 창에서는 규칙에 맞게 비밀번호를 작성하고,
2. 본인들만의 Tool로 패킷을 가로채 비밀번호를 "1" 등으로 바꾼다.
3. 그러고 로그인 시 비밀번호 1을 입력하면 로그인이 된다는 것.
답변을 받고 난 뒤, 어떻게 해야 해결을 할까 고민을 했다.
일단 회원가입, 로그인 관련 소스 코드를 찬찬히 검토했다.
그러고 생각한 결론이
프론트에서는 규칙에 맞게 설정해 통과를 하고, 서버단으로 데이터가 들어가기 전에 패킷을 가로채는 것이니까....
그럼 서버단은 변조된 데이터가 들어온다.
-> 서버에서 들어온 데이터를 한 번 더 규칙 필터를 거쳐야겠다 생각했다.
비밀번호 규칙에 맞는지 확인하는 메소드를 만들었다.
import java.util.regex.Pattern;
public class PasswordValidator {
public static boolean isValidPassword(String password) {
// 비밀번호 규칙 정의 (예: 최소 8자, 대문자 1개, 소문자 1개, 숫자 1개, 특수문자 1개 포함)
String passwordPattern = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@#$%^&+=!]).{8,}$";
return Pattern.matches(passwordPattern, password);
}
public static boolean doPasswordsMatch(String password, String repassword) {
return password.equals(repassword);
}
}
그러고 서비스 계층에서 DTO의 password, repassword 데이터를 가져온 뒤, 한 번 더 확인해 해결했다.
앞으로 회원가입 관련 기능을 개발할 때
프론트, 백에서 2번의 검증 과정을 거쳐야 된다는 것을 잊지 않을 것이다.
'공부의 일상' 카테고리의 다른 글
| [Spring Boot] 패키지 구조 참고 사이트 (0) | 2024.08.24 |
|---|---|
| [build tool] maven이란? (0) | 2024.08.12 |
| [무중단 배포] 롤링 배포, 블루 그린 배포, 카나리 배포 (0) | 2024.06.11 |
| [io 도메인] 자주 접하게 되는 ".io" URL은 뭘까? (접속하면 위험한 주소일까?) (2) | 2024.06.04 |
| [TypeScript] 사용 이유, 등장 배경 (0) | 2024.05.31 |