console 에서 DB COLUMN 추가
UserEntity에서 추가한 DB 필드 게터세터까지 생성
register.html 수정
js에서 addressSearchButton 추가
구글에 카카오 주소 API입력
script에 입력 후 option + enter로 라이브러리 다운로드.
그리고 아래 코드 입력
주소찾기 버튼 클릭하면 뜬다.
form 태그 바깥에 id와 class 생성
css 추가
const 추가
의존성 추가
구글 로그인 후 2단계 인증과 앱 비밀번호를 받자
application.properties 에서
메일을 발송해주는 메일 서버(SMTP Server)
enum UserRegisterResult 생성
IResult 인터페이스 생성
UserRegisterVo 생성
UserService에서
우편번호, 기본주소, 이메일, 닉네임, 패스워드의 정규식을 정적 메소드로 만들어준다.
전달받은 값들에 대해 한번 더 정규화 체크 -> ILLEGAL 체크인 것.
(불법 접근 차단)
여기서도 정규화가 되지 않았다는 것은 js를 우회해서 왔다는 것이기 때문에. 고로 차단대상으로 지정한다.
정규식을 적던 것을 지우고 정적 메소드를 불러와주면 됨.
여기서 정규식을 한번 더 사용하기 때문에 중복 코드를 쓰기보다 정규식을 담은 정적메소드를 만들어 간단하게 코드를 줄인다.
UserController
IUserMapper
UserMapper.xml 에서 insert 작성
resultType을 적지 않는다. 밑은 셀렉트를 해서 반환되는 타입을 명시하는 것이고, int는 인서트 결과값이 알아서 int로 나갈 것이다.
utils 패키지 생성 후 CryptoUtil 클래스 추가
UserService 에서 추가
UserController에서 호출
회원가입 해보면 DB로 넘어간다
email_verified_flag
이메일 인증이 완료되었는가에 대한 여부
데이터베이스 관리자가 DB에 저장된 사용자의 개인 정보를 볼 수 있는 위험성이 있음
암호화해서 저장해야 함
- 단방향성 암호화
암호화 후, 복호화 못 함
- MD5
글자를 64 크기나 128 크기 글자로 암호화함
크기가 제한되어 있기 때문에 다른 글자가 같은 글자로 암호화되어 중복될 가능성 있음- SHA-256, SHA-512 등
SHA-2(Secure Hash Algorithm 2)는 해시 알고리즘입니다.
여기서 해시 알고리즘은 값를 입력받아, 고정된 길이의 해시값을 출력하는 알고리즘입니다.
암호 알고리즘에는 키가 사용되지만, 해시 알고리즘 함수는 키를 사용하지 않습니다. 그래서 같은 입력에 대해 항상 같은 출력이 나오게 됩니다.
해시 알고리즘 함수를 사용하는 이유는 동일한 값인지 살피거나, 변조를 탐지할 수 있는 무결성을 갖기 위함입니다.
해시함수가 출력하는 압축된 문장을 다이제스트(Digest) 라고 합니다.
SHA-2가 생성하는 Digest 출력 길이는 224, 256, 384, 512bit입니다.
SHA-2의 256bit 버전을 SHA-256로, SHA-2의 512bit 버전을 SHA-512로 줄여 부릅니다.
현재 SHA-256은 "Collision attack" 공격에 41~64 라운드(Round)를 통과하면 공격에 안전한 것으로 간주하고,
SHA-512는 46~80 라운드를 통과해야 공격으로부터 안전한 것으로 판단합니다.
// 해싱에 사용할 값
String mixPassword = hexSaltTime + password;
// 해싱을 하기 위해서는 MessageDigest Class를 사용합니다.
// MessageDigest Algorithm은 MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512 을 사용가능합니다.
// 여기서는 SHA-256 Algorithm을 사용합니다.
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
// 값을 해싱하기 전에 reset을 통해서 해싱 인스턴스를 초기화합니다.
messageDigest.reset();
// utf8 character set으로 해싱에 사용할 값을 바이트코드로 변환하여 해싱 인스턴스에 업데이트합니다.
messageDigest.update(mixPassword.getBytes("utf8"));
// 위 과정에서 셋팅된 값을 최종적으로 digest() 함수를 통해서 해싱값을 생성합니다.
// 그리고 %064x에서 x는 16진수이고, 총 64자리의 16진수에서 값이 들어가지 못한 자리는 0으로 채워지게 됩니다.
// 최종적으로 SHA-256 해싱된 값이 16진수로 64바이트로 나오게됩니다.
// enPassword가 최종적으로 나온 해싱 결과값입니다.
String enPassword = String.format("%064x", new BigInteger(1, messageDigest.digest()));
SHA-512 도 방법은 마찬가지이다.