일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- scss
- type
- docker
- var
- C#
- webpack
- JavaScript
- TypeScript
- vue.js
- 보안
- nginx
- Python
- machine learning
- security
- 앙상블
- loop
- npm
- Clone
- dotenv
- AI
- VUE
- vuetify
- leetcode
- property
- generic
- condition
- git
- BOJ
- bash
- C++
Archives
- Today
- Total
ice rabbit programming
[보안] 쿠키 및 세션 관리 본문
쿠키
쿠키(Cookie)는 HTTP 통신 시에 사용자 정보 유지를 위해 헤더에 붙여 전송하는 정보이다. 즉, 서버에서 필요로하는 클라이언트 정보를 헤더에 붙여서 전달하는 것이다.
- 세션 관리를 위해서 token을 저장하거나 임시 데이터 관리 등에 사용된다.
- 중요 정보를 가진 쿠키는 반드시 암호화된 데이터 통신에서만 전달되도록 해야 한다.
- 세션 쿠키 : 서버를 이용하는 동안 사용자 정보를 유지한다. 자바스크립트에서 액세스할 수 없도록 쿠키의 속성을 설정해서 사용해야 한다.
- 영구(영속성) 쿠키 : 하드 디스크에 저장되는 쿠키로, 재방문시 사용자 정보를 기억하는 데에 사용된다. 중요 정보를 가지지 않도록 관리해야 한다.
쿠키를 주고 받는 메커니즘은 다음과 같다.
서버->클라이언트 : 쿠키 객체 생성(key:value) -> 쿠키 속성 설정 -> 전송
클라이언트->서버 : 모든 쿠키 얻음 -> 설정 정보 읽음 -> 배열로 저장 -> 전송
이는 XSS 공격과 네트워키 스니핑에 취약하므로 상술한 것처럼 암호화가 필요하다. 더불어 쿠키 속성을 통해 보안을 강화할 수 있다. 예를 들어 spring에서는 쿠키에 domain, expires, secure(https에서만 사용), httponly 등의 속성을 줄 수 있다.
세션
세션은 웹 서버와 브라우저 사이의 논리적 연결로, HTTP에서 Client의 정보를 관리하기 위해 사용한다(HTTP는 Stateless 프로토콜). 연결 관리를 위해 서버에서는 클라이언트마다 세션 메모리를 할당하고 세션 ID로 구분하는데, 주로 이 세션 ID를 통해 인증된 사용자를 확인한다.
아래와 같은 방법으로 보안을 강화할 수 있다.
- 강력한 암호화 알고리즘을 사용하고, 충분히 긴 세션을 사용하면 보안을 강화할 수 있다.
- 네트워크 스니핑이나 XSS 공격을 방지하기 위해 쿠키와 같이 httponly나 secure 속성 등을 설정하면 좋다.
- 세션 ID 고정 공격(세션을 발행한 페이지가 아니어도 같은 세션 ID인 경우)를 방지하기 위해 url rewrite를 사용하지 않고, 로그인 시 세션 ID를 리셋한다.
- 금융 관련이나 정부 사이트에서 흔히 볼 수 있는 형태로, 일정 시간 사용하지 않으면 자동 로그아웃을 건다.
헤더 설정
쿠키/세션은 몇 가지 헤더 설정을 통해서 취약점들을 제거 및 완화시킬 수 있다.
- Content-Security-Policy
- X-Frame-Option
- X-Content-Type-Option
- Strict-Transport-Security
클릭 재킹
마지막으로 쿠키/세션을 탈취하는 공격으로 클릭 재킹이 흔히 사용되는데, 투명한 프레임(frame)을 사용해 허위 클릭을 유도하는 공격이다. 헤더에서 X-Frame-Option을 설정하거나(서버), 브라우저 플러그인(클라이언트)으로 방지할 수 있다.
'Development > Secutiry' 카테고리의 다른 글
[보안] 접근제어 (0) | 2021.12.19 |
---|---|
[보안] 계정 및 인증 관리 (0) | 2021.10.05 |
[보안] 파일 업로드/다운로드 취약점 (0) | 2021.01.17 |
[보안] XSS(사이트 간 스크립팅) (0) | 2020.05.01 |
[보안] 인젝션 (0) | 2020.04.19 |