로그인은 그 사람이 맞는지 확인하는 작업이다.

이를 위해 인증식별이 모두 필요하다.

 

[식별]

수 많은 데이터 중 특정 데이터를 찾아낸다.

 

따라서 식별 정보는 Unique 해야 하며, 중복 값이 있어서는 안 된다.

해당 컬럼(보통 ID)을 PK(Primary Key)로 등록해야한다.

 

일반 식별정보와 고유식별정보로 나뉘며 각각 아래의 특징을 갖고 있다.

 

1. 식별 정보

노출이 되어도 상관 없는 정보

예시) ID, 전화번호, 이메일 등

 

2. 고유 식별 정보

노출이 되면 안 되는 정보로, 그 정보만 가지고도 해당 국가에서 그 사람을 특정할 수 있다.

예시) 주민등록번호, 운전면허번호, 여권번호

 

[인증]

그 사람 본인이 맞는지 확인하는 작업

 

인증 정보를 사용해서 인증을 하며, 흔히 비밀번호를 뜻한다.

예시) 비밀번호, OTP

 


 

로그인 할 때는 식별(ID)과 인증(PW)이 동시에 이루어 진다.

 

로직 >

식별 : 해당 id(와 pw)를 where을 사용하여 가져온다.

인증 : 입력된 pw와 DB에서 가져온 값을 비교하여 인증한다.

 

 

[로그인 4가지 로직 예시]

1. 식별/인증 동시

2. 식별/인증 분리

3. 1 + HASH

4. 2 + HASH

 

 

1. 식별/인증 동시

 

DB 질의를 한 번에 수행

 

예시) select * from member where user_id='pooh' and user_pass='1234'

두 가지를 동시에 확인하여 결과가 존재하면 로그인 성공, 결과가 없으면 로그인 실패

 

 

2. 식별/인증 분리

 

DB를 가져온 후, if문으로 사용자 입력 비밀번호와 비교

 

예시) 수도코드

sql = select * from member where id='____'

$db_pass = sql.ret['pas']

 

if($db_pass == $user_pass){

    // 로그인 성공

}else{

    // 로그인 실패

}

 

"ID나 비밀번호가 존재하지 않습니다." 와 같이 구체적으로 뭐가 틀렸는지 알려주지 않는게 더 안전하다고 정보보안 전문가들은 말한다고 함. 강사님은 해당 의견에 동의하지 않는다고 하심.

 

 

3,4. HASH

 

데이터의 모양을 바꿔주는 함수로서, 원래의 상태로 복구가 불가능한 일방향 함수이다.

 

암호화나 인코딩과는 조금 다른 개념.

노출되어도 평문을 알 수 없다.

 

암호화는 KEY가 있다면 원래의 데이터로 바꿀 수 있고,

인코딩은 데이터를 효율적으로 보내기 위해 사용하는 것으로 원래 상태의 글자로 바꿀 수 있다.

 

HASH의 유니크한 특징은 일방향 함수라서 원래 상태의 글자로 못 바꾸는 것.

 

예시)

sha256($user_pass) == 서버에 HASH 상태로 저장된 비밀번호

 


 

[로그인 유지 - 쿠키]

웹서버는 단순히 달라는 파일을 전달해주는 전달자라서

기본적으로는 달라는 친구가 누구인지 구분하지 못함.

 

구분하기 위하여 클라이언트가 메세지를 보낼 때 포스트잇에 "나 **이야" 라고 알려주면, 그걸로 구분하여 보내준다.

 

저 포스트잇을 "쿠키"라고 한다.

    Set-Cookie : 너 인정 (웹서버로 요청 보낼 때마다 쿠키 넣어서 보내)

 

초창기에는 이 쿠키로 로그인 시스템을 만들었는데,

문제는 쿠키의 출발지가 클라이언트(이용자) 라는 것.

(해커도 클라이언트다.)

 

쿠키의 내용을 바꿔서(변조) 다른 사람으로 로그인 할 수 있는 문제가 있다.

 

이를 해결하기 위해서 출발지를 서버로 하기로 한다. (정보를 서버에 저장)

 

[로그인 유지 - 세션]

세션은 서버에 저장되는 정보로, 이 세션 ID 정보를 통해 누가 누구인지 식별할 수 있게 된다.

 

session_start();

$_SESSION['id'] = 'pooh'; 

 

세션 스타트 : 세션을 사용하겠다.

세션 id값에 id를 저장한다. (=세션을 식별하기 위한 식별값을 만든다)

 

세션이 저장되는 위치

/var/lib/php/sessions

 

저장된 세션 값 확인 방법 :

  php -i | grep session.save_path

  ls /var/lib/php/sessions

  cat /var/lib/php/sessions/위에서 나온 값

 

세션 ID는 쿠키에 들어간다.

 

 

 

 

 

 

 

 

 

 

[세션 탈취]

쿠키를 잘 뜯어보면 세션 ID가 있다.

복사해서 쿠키에 넣고 그 페이지에 들어가면 로그인이 된다.

 

XSS, 웹 쉘, MitM 등 여러가지를 사용해서 세션아이디를 탈취 가능하다.

 

 

+ Recent posts