본문 바로가기

Web/Theory

쿠키(Cookie)

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

위와 같은 정보를 갖고 있는 사용자로 로그인을 시도해보겠다.

로그인은 성공했지만 클라이언트 요청에 쿠키 값이 존재하지 않아 "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