1. 쿠키 탄생 배경
우리는 로그인이라는 기능을 통해 사용자를 식별하고 인증할 수 있게 됐고,
이 인증된 상태를 서버와 클라이언트 간에 유지할 방법을 고민하다가 탄생하게 된 것이 쿠키이다.
(인증된 상태를 유지하지 못하면 웹 페이지에서 클릭을 할 때마다 로그인을 해야 하는 상황이 발생할 것이다.)
2. 쿠키의 동작 원리
<?php
// 로그인 코드 생략
$logined = mysqli_fetch_array($result);
if($logined) {
$cookie_name = "user";
$cookie_value = $logined['name'];
setcookie($cookie_name, $cookie_value);
echo "반갑습니다!! ".$_COOKIE[$cookie_name]."님!!";
} else {
echo "유효하지 않은 사용자입니다.";
}
?>
쿠키 동작 방식을 확인하기 위해 위와 같은 간단한 php 코드를 작성했다.
id : user01
pw : 1234
name : kim
위와 같은 정보를 갖고 있는 사용자로 로그인을 시도해보겠다.
로그인 성공 시
Set-Cookie: user=kim
서버 측에서는
사용자 식별 & 인증에 성공했으니 다음부터 서버에 요청을 보낼 때
"kim"이라는 사용자를 특정할 수 있도록
"user" 라고하는 쿠키 이름에
"kim" 이라고하는 쿠키 값을 넣어 보내면
kim 사용자로 인정하겠다는 응답을 보낸다.
새로고침을 하여 다시 웹 서버에 페이지 요청을 보내면
클라이언트 측에서 kim 이라는 쿠키 값을 넣어 서버에 페이지를 요청하는 것을 확인할 수 있다.
그리고 서버는 해당 페이지 요청이
kim 이라는 사용자에게서 온 것을
쿠키를 보고 알 수 있으며,
페이지에 사용자 이름을 출력하는 것을 볼 수 있다.
3. 쿠키의 한계
쿠키는 클라이언트 측에 저장되기 때문에 조작이나 변조될 수 있다.
예를 들어 클라이언트가 요청을 보낼 때,
kim 사용자가 쿠키 값을 다른 사용자의 값(admin)으로 변조해서 보낸다면
서버는 쿠키 값을 보고 kim 이 아닌 admin 사용자로 식별하게 된다.
이번엔 쿠키 에디터를 통해 쿠키 변조를 살펴보겠다.
먼저 kim 사용자의 계정으로 로그인한 뒤
기존에 할당된 kim 이라는 쿠키 값을 지우고
admin 으로 수정한다.
서버는 해당 요청을 보고 admin 사용자를 출력하는 모습을 볼 수 있다.
만약 admin(관리자)만 볼 수 있는 페이지에
위와 같이 쿠키 값을 변조하여 서버에 요청을 보내면
kim 사용자는 admin 사용자의 권한으로 해당 페이지에 접속할 수 있게 될 것이다.
'Web > Theory' 카테고리의 다른 글
로그인 로직 케이스 (0) | 2024.05.04 |
---|---|
세션(Session) & 세션 ID (1) | 2024.05.04 |
식별 & 인증 (0) | 2024.05.02 |
NoSQL - 비관계형 데이터베이스 (2) | 2024.05.02 |
웹 페이지 동작 개념 정리(Web - WAS - DB) (0) | 2024.05.02 |