로그인이란 이 사람이 맞는지 확인하는 작업
로그인하는 사람을 확인하는 과정을 식별이라고 표현함
로그인에서 식별이란 많은 id 가있고 겹치는 정보가 있더라도 겹치지 않게 key를 부여하여 확인하는 작업
식별 정보는 유니크해야 된다 중복되면 안 된다 그래서 db에 등록할 때 primary key로 등록
ex) 우리나라에서는 고유식별 정보가 있다. 고유식별 정보란 우리나라에서 주민등록번호나 여권번호 또는 운전면허번호 같은 정보로 동명이인이 있어도 한 사람을 특정할 수 있다.
하지만 다른 점은
식별 정보랑 고유식별 정보랑 위험성의 차이가 있다.
식별 정보는 id는 노출이 돼도 된다 고유식별 정보는 민감한 정보이다.
로그인하는 사람이 본인이 맞는지 확인하는 작업을 인증이라고 표현함
인증 정보란 비밀번호이다
인증 정보는 노출이 되면 x
식별과 인증의 케이스들
식별과 인증을 동시에 하는 케이스
데이터베이스 질의를 한 번에 수행해서 로그인하는 케이스
대략적인 코드
select * from table where id='xx' and pass='xxxx'
$ret = $sql->execute();
if ($ret) {
echo "로그인 성공";
} else {
echo "로그인 실패";
}
동시에 id랑 pass를 비교해서 두 개 모두 만족해야 한다 그래야 로그인 성공
식별과 인증을 따로 분리해서 하는 케이스
식별을 먼저 한 다음
select * from table where id ='xx'
인증을 한다
데이터베이스의 사용자 비밀번호와 사용자가 제출한 비밀번호를 일치하면 로그인 성공
$database_password = sql.ret['pass'];
if ($database_password == $user_password) {
echo "로그인 성공"; }
else {
echo "로그인 실패"; }
사진 예시(쿼리를 확인할 수는 없지만 이런 느낌)
넷플릭스와 네이버는 식별과 인증을 동시에 하는 경우에는
아이디와 비밀번호를 동시에 확인한다.
aws와 구글의 경우 식별과 인증을 분리의 경우에는
이메일 또는 아이디를 먼저 확인한다.
HASH 란
일방향 함수이다
데이터의 모양을 한쪽 방향으로 바꿔주고 바꾼 데이터의 모양을 다시 원래 상태로 복구를 못 시키는 함수이다.
암호화는 올바른 키를 가지고 있다면 언제든지 원본 데이터로 복구할 수 있다고 한다.
인코딩은 데이터를 효율적으로 보내기 위해 쓴다. 인코딩의 경우도 디코딩 하면 원래 글자로 돌아온다.
해시의 경우는 한쪽 방향으로 변환되고 입력 값이 하나라도 달라지면 해시 값이 크게 달라지도록 설계되어 있어 복구가 불가능하다.
hash를 사용하면 사용자가 어떤 비밀번호를 사용했는지는 모르지만 웹 서버에서 사용자가 제출한 hash 값과 db에 있는 hash 값을 비교한다.
쿠키란
사용자의 클라이언트(사용자의 브라우저)에서 받은 정보를 서버에 보내는 역할 입력한 데이터를 기억한다.
사용자의 클라이언트에 저장하는 정보로 2000년대 초반만 하더라도 다시 접속할 때 자동 로그인 될 수 있게 로그인 정보를 쿠키에 저장했다고 한다.
그래서 보안 인식이 높아짐에 따라 로그인 정보를 저장할 때 사용자의 브라우저 말고 서버에 저장되게 할 수 있는 기능을 사람들은 사용했다.
세션이란
세션이란 서버에 저장되는 정보이다.
세션은 쿠키 안에 들어가서 관리가 된다.
서버에서 세션 id를 생성하여 사용자에게 주면 쿠키가 유지되는 동안 세션 id도 유지할 수 있는 기능이다.
세션 id는 서버에서 설정한 시간마다 재발급되거나 로그아웃하고 다시 접속하면 세션 id도 계속해서 달라진다.
세션 id는 쿠키에 저장되지만 유추할 수 없게 랜덤 한 문자열로 이루어져 있다.