노말틱 모의해킹

[3주차 강의] 로그인 인증 작동 방식

debugginglog 2025. 4. 23. 03:17
지난주 복습
1. SQL, DB : select, insert, update, where구문

과제
1. DB Connector : DB에게 물어볼려면 계정정보를 php에 넣어놔야한다.
2. row를 통해서 학생의 점수를 가져오는 간단한 코드
3. 회원가입 기능 : insert 구문을 통해서 실행
4. mysqli_close($conn)을 써줘야지 규모가 커질 때 서버가 느려지지 않는다.

첫번째 강의 : 로그인 인증 과정

1. 로그인 과정 : 그 사람이 맞는지 확인하는 작업
2. 식별과 인증의 과정을 거침
3. 식별 : 피아식별, 수많은 데이터 중에 특정 데이터를 후레쉬로 비추는 작업. 수많은 정보들 중에서 특정 고객을 찾아내는 작업. 식별정보는 UNIQUE해야함. 중복되는 값이면 안된다.
4. 고유식별정보 : 세상에서 하나의 사람을 특정할 수 있는 정보. ex)전화번호, 여권번호. 식별정보는 노출되는 것은 괜찮다. 하지만 고유식별정보는 노출되면 안된다. 취약점이 된다.
5. 인증 : 그 사람이 본인이 맞는지 확인하는 작업. 인증정보를 통해서 인증함. 인증정보는 외부에 알려지면 안됨. ex)비밀번호, OTP
6. 순서 : ID를 보고 normartic이라는 사람이 로그인을 하는구나 -> id가 normaltic인지 DB 조회 -> 비밀번호 조회해서 같은지 비교하는 식별작업

두번째 강의 : 식별과 인증하는 로직

1. 식별과 인증을 동시 : DB 질의를 한번에 수행해서 로그인 구현. 아이디와 비밀번호를 한번에 조회해서 같은 회원이 존재하는지 하나의 sql 명령어로 확인하는 방식. 결과가 있으면 로그인 성공, 결과가 있으면 로그인 실패.
2. 식별과 인증을 분리 : 아이디가 일치한 값을 불러오고, 불러온 것에서 비밀번호를 추출한 다음 사용자의 비밀번호가 같은지 확인하는 방식. 비밀번호가 일치하면 로그인 성공, 비밀번호가 일치하지 않으면 로그인 실패.
3. Hash : 일방향으로 바꾸는 방식이다. 거꾸로 복호화가 안되는 방식이다. 이것이 노출되어도 안전하지는 않지만, 비밀번호 자체가 노출되는 것보다는 괜찮다. Hash값은 변하지 않는다.
4. 암호화, 인코딩과 Hash의 차이점을 생각해보기. 암호화와 인코딩은 원래상태로 갈 수 있지만, Hash는 그럴 수가 없다. 비가역반응 같은거.
5. 암호화와 인코딩의 차이 : 암호화는 복호화를 위해 key가 필요하지만 인코딩은 그러지 않아도 된다. 그저 데이터를 효율적으로 전달하기 위함.

세번째 강의 : 로그인 상황을 유지하는 방식

1. 웹서버 입장에서 로그인한 뒤에는 누구인지 식별 및 인증할 수 있게 해야함. 로그인이 유지되어야함.
2. 웹서버에 사용자를 인증할 수있는 포스트잇(쿠키)을 붙여서 보낸다.
3. Set-Cookie : loginUser=normaltic 이라고 쿠키를 설정해서 보내면 서버에서 인증한다.
4. 쿠키를 보내는 출발지는 client. 즉, 해커도 바꿔서 보낼 수 있음. 쿠키변조 로그인시스템. 쿠키가 클라이언트 측에 저장되기 때문에 생기는 문제.
5. 세션 : 쿠키를 서버에 저장하기 위해서 적용된 개념. 세션의 정보가 누구인지 모르기 때문에 Session 식별값을 만듦. 쿠키에 세션 아이디를 저장해서 식별함. 세션이 닫히면 다시 인증을 해야함. 그래서 세션아이디는 유추할 수 없는 랜덤한 문자열로 생성함.
6. 그래서 해커는 세션 ID를 탈취할려고 함. 그래서 서버에서 세션 ID를 새로 갱신하려고 함
7. 과제 : 요새는 JWT로 로그인한다. 3가지 덩어리로 되어있음. JWT 공부하기