로그인 이란?
- 식별과 인증 작업
- 사용자가 데이터를 입력하면, 데이터와 일치하는 값을 찾아내고 그 값에 해당 사용자가 맞는지 확인하는 작업
식별/인증
식별이란?
- 수 많은 데이터 중 특정 데이터를 찾아내는 작업
- 식별 정보는 유니크해야 하므로 보통 PK(Primary Key)로 둠
- Primary Key란?
- 데이터베이스에서 특정 데이터를 유일하게 식별하기 위해 사용되는 필드 또는 필드의 집합.
- 각 데이터에 대해 고유함.
- NULL값 허용 안됨
- 테이블당 하나의 컬럼에 기본키를 지정할 수 있음
- Primary Key란?
- ID값, 전화번호, 이메일 등으로 식별할 수 있음
- 노출이 되어도 상관 없음
- 고유식별번호(주민등록번호, 운전면허 번호 등)와는 구분해야 함 -> 노출 되면 안됨
인증이란?
- 해당 사용자 본인이 맞는지 확인하는 작업
- 인증정보(ex) 비밀번호, OTP 등)을 사용하여 비교함
HASH란?
- 입력 데이터를 고정된 길이의 문자열로 변환하는 단방향 함수
- 복호화 불가능
- 비밀번호 저장, 데이터 무결성 검사 등에 활용됨
- 암호화와 인코딩과는 다름
로그인 케이스
1. 식별과 인증을 동시
$sql = "select * from member where id = '$user_id' and pass = '$user_pass'"
$ret = $sql.execute();
if($ret){
//로그인 성공
}else{
//로그인 실패
}
2. 식별과 인증을 분리
$sql = "select * from member where id = '$user_id'" //식별
$db_pass = sql.ret['pass']
//인증
if($db_pass == $user_pass){
//로그인 성공
}else{
//로그인 실패
}
3. 식별과 HASH를 이용하여 인증을 동시
$hashed_pw = hash('sha256', $user_pass); // 비밀번호 해시 적용
$sql = "select * from member where id = '$user_id' and pass = '$hashed_pw'";
$ret = $sql.execute();
if($ret){
//로그인 성공
}else{
//로그인 실패
}
4. 식별과 HASH를 이용하여 인증을 분리
$sql = "SELECT * FROM member WHERE id = '$user_id'"; // 식별
$ret = $sql.execute();
//인증
if ($ret) {
// 데이터베이스에서 가져온 해시된 비밀번호
$db_pass = $ret['pass'];
// 입력한 비밀번호와 해시된 비밀번호를 비교
if (password_verify($user_pass, $db_pass)) {
// 로그인 성공
} else {
// 로그인 실패
}
} else {
// 로그인 실패
}
로그인 유지
쿠키
- 웹 서버가 클라이언트(브라우저)에 저장하는 작은 데이터 파일
- 로그인 상태 유지, 쇼핑 카트 정보 저장하는 데에 사용
- 클라이언트 측에 저장되므로, 사용자가 수정할 수 있으며, 악의적인 접근에 노출될 위험이 있음
- 중요한 정보는 쿠키에 저장하지 않는 것이 좋음
세션
- 웹 서버가 사용자의 상태 정보를 서버에 저장하는 파일
- 사용자 로그인 상태 유지, 사용자 정보 및 상태 관리, 보안이 필요한 데이터 저장하는 데에 사용
- 쿠키에 랜덤한 세션 ID 값을 저장하여 세션을 식별함
- 데이터가 서버에 저장되므로, 클라이언트에서 직접적으로 수정할 수 없음
- 쿠키에 비해 보안성이 상대적으로 높음
후기
- 단방향으로 데이터를 변환하여 복호화할 수 없는 특성이 있는 해시 알고리즘과 웹에서 사용자 정보를 저장하고 관리하는 대표적인 방식인 쿠키와 세션에 대해 배웠다.
- 웹 개발을 했을 당시 SHA-256 알고리즘만 사용하여 따로 찾아보지 않았는데 이번 학습으로 해시 알고리즘에 대해 찾아보면서 여러 가지 알고리즘이 있다는 것을 알았다. 각각의 특징과 종류에 대하여 추가로 학습하여 정리해야겠다.
- 웹에서 사용자 정보를 저장하고 인증 상태를 유지 및 관리하는 방식은 쿠키, 세션 외에도 JWT나 로컬 스토리지, 세션 스토리지 등 여러 방식이 있고 각각의 상호작용을 어떻게 하는지 학습하여 추가로 정리해야겠다.
728x90
반응형
'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글
모의해킹 스터디 3주차 과제(2) - 리눅스 환경에서 PHP로 JWT 구현 (0) | 2024.11.06 |
---|---|
모의해킹 스터디 3주차 과제(1) - 로그인 케이스 구현 (0) | 2024.11.01 |
모의해킹 스터디 2주차 과제(2) - 로그인 (0) | 2024.10.28 |
모의해킹 스터디 2주차 과제(1) - 회원가입 (0) | 2024.10.27 |
모의해킹 스터디 2주차 과제 - Mini Mission (0) | 2024.10.26 |