반응형
쿠키와 세션
💡 쿠키와 세션은 서버가 클라이언트를 식별하고 인증하기 위한 장치입니다. 웹해킹 분야에서 자주 다루게 될 중요한 주제입니다.
이번에 배울 내용은 다음과 같습니다.
1. 쿠기와 세션
2. 쿠키와 세션의 발전 과정
3. JWT
4. 브라우저 저장소
🔥 다음과 같은 내용을 도전해봅시다.
네이버 접속 시 사용되는 쿠키들 확인해보기위에서 얻은 쿠키를 변조한 후 결과 분석하기
쿠키와 세션
쿠키(Cookie)와 세션(Session)은 서버가 클라이언트를 식별하고 상태를 유지하기 위한 두 가지 주요 기술입니다. 웹은 본질적으로 상태 비저장(Stateless)이기 때문에, 이러한 장치들이 클라이언트를 구분하고 지속적인 상호작용을 가능하게 합니다.
1. 쿠키와 세션의 기본 개념
쿠키(Cookie)
- 클라이언트(웹 브라우저)에 저장되는 데이터입니다.
- 서버가 클라이언트를 식별하기 위해 생성하고, HTTP 요청 시 브라우저가 서버에 쿠키를 자동으로 포함하여 전송합니다.
- 특징:
- 클라이언트 측에 저장: 클라이언트의 브라우저에 텍스트 파일 형태로 저장.
- 영속성: 브라우저를 닫아도 삭제되지 않는 영속적인 쿠키와, 세션 종료 시 삭제되는 세션 쿠키가 있음.
- 사용 예: 로그인 상태 유지, 최근 본 상품 정보, 사용자 맞춤 설정 등.
예시:
- 로그인한 상태를 유지하기 위해 사용자의 로그인 정보를 쿠키에 저장.
- 쇼핑몰 사이트에서 사용자가 장바구니에 담은 상품 정보를 쿠키에 저장.
세션(Session)
- 서버에 저장되는 상태 정보입니다.
- 클라이언트가 서버에 접속할 때 세션이 생성되며, 클라이언트를 구분하기 위해 고유한 세션 ID를 부여합니다.
- 클라이언트는 세션 ID를 쿠키나 URL 파라미터로 서버에 전달하여 상태를 유지합니다.
- 특징:
- 서버 측에 저장: 클라이언트 정보가 서버에 저장되므로 보안성이 높음.
- 일시성: 세션은 브라우저를 닫거나 일정 시간이 지나면 만료됨.
- 사용 예: 로그인 상태 관리, 장바구니 정보 유지 등.
예시:
- 사용자가 로그인할 때, 서버는 사용자의 세션을 생성하고, 로그인한 사용자에 대한 정보를 세션에 저장하여 다른 페이지에서 동일한 사용자 정보를 제공.
- 웹사이트에서 특정 페이지에 대한 접근 권한을 제한할 때 세션을 사용하여 로그인한 사용자만 접근하도록 함.
2. 쿠키와 세션의 차이
저장 위치 | 클라이언트(브라우저) | 서버 |
데이터 저장 방식 | 클라이언트에 키-값 쌍으로 저장 | 서버에 세션 ID로 저장 |
보안 | 보안에 취약 (변조, 탈취 위험) | 비교적 안전 (서버에서 관리) |
유효 기간 | 영구적 또는 브라우저 종료 시 삭제 | 브라우저 종료 또는 세션 타임아웃 |
속도 | 빠름 (클라이언트에서 처리) | 느림 (서버 요청 필요) |
사용 예 | 로그인 유지, 사용자 맞춤 정보 | 로그인 인증, 장바구니 관리 |
3. 쿠키와 세션의 발전 과정
초기 웹 환경
- Stateless: HTTP는 상태를 저장하지 않는 비연결성 프로토콜이므로, 각 요청은 독립적.
- 클라이언트를 식별하거나 상태를 유지하는 기능이 없어, 쿠키와 세션이 도입됨.
쿠키
- 초기에는 브라우저 측에서 상태를 유지하기 위해 쿠키가 도입되었습니다.
- 하지만 보안 취약점(변조, 탈취)과 데이터 저장 용량(4KB 제한) 문제로 한계가 존재.
세션
- 민감한 데이터를 클라이언트가 아닌 서버에서 관리하는 세션이 등장.
- 그러나 세션은 서버 메모리를 사용하기 때문에, 사용자 수가 많아지면 서버 부하가 증가.
JWT(JSON Web Token)
- 세션과 쿠키의 단점을 해결하기 위해 등장한 토큰 기반 인증 방식.
- 클라이언트 측에서 상태를 유지하지만, 암호화된 토큰으로 보안성을 높임.
- 상태 비저장 방식으로, 서버 확장성이 뛰어남.
4. JWT(JSON Web Token)
JWT (JSON Web Token)는 웹 애플리케이션에서 사용자 인증 및 정보 교환을 위해 널리 사용되는 인증 토큰입니다. JWT는 두 시스템 간에 JSON 객체 형태로 안전하게 정보를 전송할 수 있도록 설계된 개방형 표준(RFC 7519)입니다. 주로 사용자 인증과 권한 부여에 사용됩니다.
JWT의 구성
JWT는 세 가지 파트로 나뉩니다:
- Header: 토큰 유형과 알고리즘 정보를 포함.
- Payload: 사용자 정보(주로 클레임, Claim)를 포함.
- Signature: Header와 Payload를 암호화하여 토큰의 무결성을 보장.
JWT 예시
다음은 간단한 JWT의 예시입니다:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
이 JWT는 세 부분으로 나눠집니다:
- 헤더: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- 페이로드: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
- 서명: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT의 특징
- 자체 인증: 사용자 정보를 토큰 자체에 포함하여 상태를 유지.
- 확장성: 상태를 서버가 아닌 클라이언트에서 관리하므로 서버 부하 감소.
- 보안: 민감한 정보는 저장하지 않으며, 암호화된 Signature로 위조 방지.
JWT의 한계
- 클라이언트 측에서 저장되므로 탈취 시 취약.
- 토큰이 길어져 네트워크 트래픽 증가 가능.
5. 브라우저 저장소
1) 로컬 스토리지(Local Storage)
- 브라우저에 영구적으로 데이터를 저장.
- 쿠키보다 큰 용량(최대 5MB)을 지원.
- 브라우저를 닫아도 데이터 유지.
2) 세션 스토리지(Session Storage)
- 브라우저에 일시적으로 데이터를 저장.
- 탭이나 브라우저를 닫으면 데이터 삭제.
3) 쿠키
- 클라이언트 측 저장소로, HTTP 요청 시 자동으로 서버에 전송.
- 최대 크기 제한(4KB).
실습: 네이버 접속 시 쿠키 확인
- 개발자 도구 열기
- 브라우저에서 F12를 눌러 개발자 도구를 엽니다.
- Application 탭으로 이동.
- 쿠키 확인
- 좌측 메뉴에서 Storage > Cookies를 선택.
- 네이버의 쿠키 정보를 확인할 수 있습니다.
- 쿠키 변조
- 특정 쿠키 값을 변경하고 페이지를 새로 고침하여 서버 반응 확인.
- 예: 로그인 쿠키를 삭제하거나 위조하여 인증 상태를 테스트.
정리
- 쿠키는 클라이언트에 저장되며, 간단한 데이터 전송 및 상태 유지를 위해 사용됩니다.
- 세션은 서버에 저장되며, 보안성과 일시적인 데이터 유지에 적합합니다.
- JWT는 상태 비저장 방식의 인증 토큰으로, 쿠키와 세션의 단점을 보완합니다.
- 브라우저 저장소(로컬/세션 스토리지)는 클라이언트 측에서 데이터를 효율적으로 저장하는 대안입니다.
쿠키와 세션, 그리고 발전된 인증 방식(JWT)을 이해하면 웹 개발 및 해킹 방어의 기초를 다질 수 있습니다. 😊
반응형
'KnockOn > 1주차 TIL' 카테고리의 다른 글
[1주차 TIL] KnockOn Bootcamp - 프록시 (1) | 2024.12.07 |
---|---|
[1주차 TIL] KnockOn Bootcamp - 패킷 (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - HTTP / HTTPS (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 프로토콜 (1) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 웹이란? (0) | 2024.12.04 |