3주차 로그인 로직 식별과 인증 HASH COOKIE SESSION
로직 (로그인 과정)
-식별
-인증
식별
-데이터들 중에 특정 데이터를 찾아 확인하는 것
-동명이인도 식별이 가능하다 본인만 가지고있는 unique한 것으로 식별하기 때문이다.
- 따라서 식별할 ID는 PRIMARY KEY로 중복이 되지 않게 설정
- 또한 식별정보는 노출이 되어도 상관이 없다
- select * from member where id ='normaltic' ->식별
+ 식별정보 -> ID 전화번호 이메일
+고유식별정보는 해당 집합내에서 한명만 가지고있는 것, 노출이 되면 안된다. -> 주민번호, 여권번호
인증
-본인이 맞는지 인증정보를 비교해 확인하는 것
- 로그인도 인증절차다
- 인증정보는 유출되면 안된다
EX)
-> 비밀번호, otp
로직케이스
-식별/인증 동시
-식별/인증 분리
식별/인증 동시
- DB질의를 한번에 수행해 로그인 구현
EX)
-> $sql = "select * from member where id='user_id' and pass='$user_pass"; ->아이디 비번값을 동시에 만족하면 로그인
즉 네이버 로그인과 비슷한 로직
// pseudocode
$sql = "select * from member where id='$user_id' and pass='$user_pass'"
$ret = $sql.execute()
if($ret){
// 로그인 성공
}else{
// 로그인 실패
}
식별/인증 분리
- DB질의를 분리해서 수행해 로그인 구현
EX)
-> $id = $_SESSION['user_id'];
$pass = mysqli_real_escape_string($db_conn, $_POST['user_pass'];
$sql = "SELECT * FROM db_table WHERE id='$id' AND pass='$pass'";
-> 아이디로 식별을 먼저하고 아이디에 해당되는 비번을 가져와서 비교한 후 만족하면 로그인
즉 구글로그인과 비슷한 로직
// pseudocode
$sql = "select pass from member where id='$user_id'"
$db_pass = $sql.execute()
if($db_pass == $user_pass){
// 로그인 성공
}else{
// 로그인 실패
}
+ 아이디, 비번이 틀렸을 때 아이디가 틀렸다거나, 비번이 틀렸는지 정확하게 출력하지 않게 해야한다.
어떤것이 틀렸다는 것이 출력되면 둘중에 하나가 맞았다는 것을 알게 되니까
HASH
- 1방향 함수 복구가 되지 않는게 가장 큰 특징이다
- 암호화는 복호화가 가능하지만 HASH는 복호화가 불가능하다
- 한번정도 노출이 되어도 평문을 바로 알 수 없다
- 노출된 비밀번호를 다른 사이트에서 사용하는 크리덴셜 스터핑 예방
EX)
-> 1234 HASH처리 = RRRRR, RRRRR를 DB에 저장
로그인시 1234를 입력받았을때 RRRRR이 들어오는 값을 비교해서 로그인한다
즉, 모양을 바꾸는 건데 되돌릴 수 없다 그래서 비밀번호를 HASH화 해서 저장한다.
// pseudocode
$sql = "select * from member where id='$user_id' and pass=md5('$user_pass')"
@2023년 11월 15일
4 주차 수업 노트 2
$ret = $sql.execute()
if($ret){
// 로그인 성공
}else{
// 로그인 실패
}
로그인 유지방법
- COOKIE
- SESSION
- IP는 아님 카페가면 카페IP로 바뀌는데 로그인유지가 되니까
COOKIE
- 클라이언트에 저장
- 웹서버가 로그인하려면 파일내놔! 하는데 거기서 나 신미니임 이라고 포스트잇(쿠키) 붙여서 준다
그럼 웹서버가 ㅇㅋ 신미니 파일 줄게
- 즉, 웹서버는 Set_Cookie loginUser = shinmini면 너꺼 다줄게
그래서 클라이언트는 Set_Cookie loginUser = shinmini 라는 쿠키 붙여서 shinmini 관련 페이지 다 들어감
- 문제 쿠키의 출발지가 클라이언트라는 건데 해커도 클라이언트라서 쿠키값을 변조해서 타계정으로 쉽게 로그인함
즉, 쿠키카 클라이언트에 저장이 되어서 문제
- 세션 서버에 저장되는 연결정보(식별정보)가 된다
SESSION
- 세션서버에 저장되는 연결정보인 쿠키를 이용해서 세션에 들어간다
- 세션ID는 COOKIE로 되어있는 식별정보
- session_start();
- 서버에 파일로 저장
- 웹서버에서 로그인정보 넘겨주려면 세션아이디를 보내야한다 그래서 쿠키에 내 정보말고 세션아이디를 보낸다
그럼 웹서버에서 세션아이디 dlshfalhlkjdddasaws? ㅇㅋ 정보 찾아보겠음 오 너 신미니네 너꺼 다줄게
- 세션아이디도 해커가 바꿀수있지만 로그인할때마다 세션아이디를 다르게 주기 때문이다
- PHP로 세션아이디를 만들기 때문에 PHPSESSIONID로 쿠키값이 가는데
dlshfalhlkjdddasaws식이라 다른 세션아이디를 유추하기 어렵다
- 그래도 로그인하는 시간동안 세션아이디를 탈취하기도 한다 크로스스크립트, 웹쉘, 엠아이티엠 공격
- 그래서 자동로그아웃을 이용하기도 하고 세션을 계속 시키기도 한다
+요새는 많은곳에서 jwt쓰는
+ login_Token =블라블라 3개 덩어리 값이 있는데 그건무엇일까요 한번 찾아봅시다.
'개념정리' 카테고리의 다른 글
6주차 UNION SQL INJECTION/ORDER BY/LIMIT/LIKE (1) | 2023.11.30 |
---|---|
5주차 SQL INJECTION 쿠키조작/인증우회 (1) | 2023.11.29 |
4주차 Burp Suite REQUEST/RESPONSE 게시판 (1) | 2023.11.21 |
2주차 DB PHP로 생성 / 출력 / 입력 / SQL / Docker (0) | 2023.11.09 |
1주차 웹 GET POST (0) | 2023.11.09 |