728x90
✅ Cookie
웹 서버의 제어 + 웹 브라우저 내 저장 및 전송
- 웹 서버의 제어: Set-Cookie헤더를 통해 어떤 데이터를 쿠키로 쓸것인지, 유효시간 및 보안 설정
✅ 쿠키 사용의 기준: Dmain + Path
웹 브라우저가 쿠키를 웹 서버에게 전송하는 기준(전송할지, 말지) = 해당 쿠키를 어떤 요청에 보낼지
모든 쿠키에는 도메인이 연결되어있다.
- 같은 도메인이더라도 각 페이지마다 보내줘야하는 쿠키가 다르다. 예를 들어서 웹 브라우저에 아래와 같이 저장되어 있는 쿠키 리스트가 있다고 쳐보자
- 1번 쿠키 : h1 = w1 (Domain: `a.com`, Path: `/`)
- 2번 쿠키 : h2 = w2 (Domain: `a.com`, Path: `/user`)
- 3번 쿠키 : h3 = w3 (Domain: `b.com`, Path: `/hello`)
- 4번 쿠키 : h4 = w4 (Domain: `c.com`, Path: `/world`)
위 리스트 기반으로 아래 웹 서버에 대한 요청에 따라 전송되는 쿠키는?
- 웹 브라우저에서 `a.com/user/name` 호출 시 1번 쿠키 + 2번 쿠키 전송
- 웹 브라우저에서 `a.com/` 호출 시 1번 쿠키 전송
- 웹 브라우저에서 `b.com/hello` 호출 시 3번 쿠키 전송
- 웹 브라우저에서 `c.com/` 호출 시 어떤 쿠키도 전송하지 않음
💡쿠키 사용기준이 되는 path의 경우 모든 path에 쿠키를 적용하기 위해서는 `*`가 아닌 `/`로 사용
추가로 path는 Case sensitive(대소문자가 매우 중요)
✅ 쿠키 유효시간: MaxAge / Expirse
- 명시되어 있다면 : Persistent Cookie -> 윈도우 창을 닫아도 유지가 되므로 Persistent라고 함
- 명시되어 있지 않다면: Session Cookie -> 윈도우 창을 닫으면 없어지므로 Session이라고 함.
Session의 의미: 열고 -> 닫힘의 하나의 pair에 모두 사용됨
- 로그인 세션: 로그인 한 뒤 -> 로그아웃하기까지
- HTTP 세션: TCP/UDP 연결 후 Request 저송 후 Response 받기까지
- 브라우저 세션: 하나의 탭/창이 열리고 닫히기까지
✅ 쿠키 보안: HttpOnly, Sucure, SameSite
쿠키에 있어서 보안이 중요한 이유
쿠키는 유저 로그인 인증을 위한 정보 저장이나 웹앱에서 광고 및 마케팅 목적을 위한 식별자로 사용되는 기술.
웹 브라우저에 저장되어있으므로 유저가 쿠키 조회가 가능하고, 웹 브라우저가 웹 서버에 요청 시 탈취될 가능성 有
- 웹 브라우저가 매번 웹 서버에게 요청 시 로그인 인증할 필요없이 인증 완료 여부 판단을 위해 쿠키로 유저 정보를 쿠키에 저장하는 것인데, 인증 완료 여부 판단을 위한 쿠키가 탈취되면, 해커가 해당 유저인것 처럼 속일 수 있다.
1. 쿠키 보안 설정: HttpOnly
XSS(자바 스크립트) 공격에 의한 쿠키 접근 제어
- 쿠키는 웹 브라우저에 있고 자바스크립트로 읽을 수 있는데, 이것을 막는데 HttpOnly설정
- http 요청할 때만 쿠키에 접근할 수 있다.
2. 쿠키 보안 설정: Secure
패킷 탈취(Man-in-the-Middle)방지를 위해 HTTPS채널에서만 쿠키 사용 허용
💡MITM방지: 요청(클라이언트) - 응답(서버) 사이에서 요청, 응답 탈취
3. 쿠키 보안 설정: SameSite
웹 브라우저 주소란에 표시된 도메인과 동일한 도메인에 대한 요청(API)시에만 쿠키 전송
- CSRF방지: 유저가 의도하지 않았는데, 해커가 심은 스크립트에 의해 크로스 사이트에 요청 전달
- Cross-Site Request Forgery 사이트 간 요청 위조 (CSRF공격 자세히 알아보기)
💡same site: ww.web.dev = static.web.dev
💡corss site: www.web.dev != static.another.com
- TLD, second level domain이 다르면 크로스사이트
- 과거 해당 크로스 사이트에 접속해서 얻은 로그인 인증 정보가 함께 전달돼 크로스 사이트(비의도)공격
- CSRF 공격으로 크로스 사이트(비의도) 요청 시 크로스 사이트에 과거에 설정됐던 쿠키가 전송 (크로스사이트에 과거에 설정됐던 쿠기 = 서트파트 쿠키)
💡SameSite 옵션 이해를 위한 중요 개념: 퍼스트파트 쿠키 & 서드파트 쿠키 설명 및 에시 그림
퍼스트파티, 서드파티 판다는 Stie Domain과 Cookie Domain의 일치여부로 결정
1. Site Domain: 현재 유저(내)가 보가 있는 웹 브라우저 창에 뜬 도메인명
2.Cookie Domain: 쿠키에 설정되어 있는 Domain + Path값에 명시된 도메인명
🔹퍼스트파트 쿠키
-cookie domain = site domain
현재 도메인에서 필요에 따라 생성/저장한 로그인 인증과 같은 개인화 정보 인식용 쿠키
🔹서드파트 쿠키
- cookie domain != site domain
많은 홈페이지들을 오가며 유저의 행동을 기록 및 추척하기 위한 Goolge Ads 정보 수집
실제 현업에서의 퍼스트파트 쿠키와 서드파트 쿠키의 예시는 어떤지 살펴보자(오늘의 집)
HTTPS사용해도 = 서드파트 쿠키가 로그인, 인증정보를 담고 있다면 어드민 API호출도 가능
- 전체 유저 정보 조회, 대량 삭제 권한이 필요한 API 호출이 인증 정보 쿠키로 손쉽게 가능
HTTPS 미사용시 = MITM로 요청을 가로챈다면 서드파트 쿠키를 외부에서 볼 수 있다.
그래서 크로스 사이트 요청 시 크로스 사이트에 해당하는 쿠키라 할지라도 CSRF공격으로 인해 쿠키 탈취될 위험이 있으므로 전송되지 않게 막을 필요가 있다.
이걸 해주는 쿠키 설정이 Same site이다.
same site옵션은 크로스사이트 요청시 보안 레벨을 설정해서 서드파트 쿠키를 담아?말아?를 결정해준다.
[same site 보안 레벨]
- 보안 레벨 높음: Strict: 퍼스트파티 쿠키만 전송 허용
- 그러면 서드파트 쿠키가 필요한 경우 어떻게 쿠키 정보를 전송해야하나? 웹 브라우저와 same site인 서버에 요청을 보내고 해당서버에서 서드파트쿠키 서버를 호출한다.
- 보안 레벨 중간: Lax: 서트파트 쿠키라도 특수 케이스시엔 부분 허용
- 보안 업데이트 후 최신 크롬 default값
- 특수 케이스 = 상태 서버 변경하지 않고 조회만: `GET`, `<a href>`, `<link rel="prerender">`
- 보안 레벨 낮음: None: 서드파트 쿠키 모두 허용
- 보안 업데이트 전 과거 크롬 default값
- 단, Secure 설정을 강제하여, HTTPS 미사용시 MITM 탈튀에 대한 문제 방지
💡google.api가 채번해서 유저 FootPrint 추적하기
Q. same site=strict일때, goole.api가 채번을 해주더라도 브라우저에서 google.api 로 서드파트 쿠키를 보내지 못하여 유저가 어떤 행동을 했는지 정보를 수집할 수가 없습니다. 그래서 google.api의 채번 역할을 same origin인 서버가 대신 해주고 그걸로 유저의 footPrint를 수집한 후, 수집한 정보를(same origin) 서버에게 넘겨주고, 이 정보를 받은(same origin)서버가 google
.api를 호출(서버끼리는 CSRF가 발생하지 않아서)해서 정보를 넘겨주는 방식인가요?
A. 맞다
- 기억: 서버와 서버는 CSRF가 발생하지 않는가? YES!!
✅ Cookie 단점
- 쿠키 정보가 웹 브라우저에 저장된다
- 민감 정보들이 안전하지 않은 채로 저장되어 있다.
- HttpOnly, Seucre, SameSite로 방어가능 하긴 함
- 저장되는 정보들에 대해 웹 서버만의 키로 암호화해놓고, 볼때마다 복호화해서 보면 된긴함
- 웹 브라우저간 공유 불가: 웹브라우저 단위의 저장소이다보니 지역성 문제 발생
- 매 웹 브라우저에서 하는 검색과 같은 행위들이 해당 브라우저에만 저장
- 민감 정보들이 안전하지 않은 채로 저장되어 있다.
- 쿠키는 Domain + Path만 일치한다면 해당 웹 서버로 모든 쿠키를 담아서 보낸다
- 쿠키로 저장하려는 정보량이 많아질 수록 요청의 크기가 커진다.
- 요청 크기가 커지면, 불필요한 Netword Overhead발생
- 쿠키를 단지 저장소로 써서는 안되는 이유이다.
- 그렇기에 웹 서버에게 알려주지 않아도 되는 정보의 경우 웹 스토리지 사용 권장
728x90
'ASAC 웹 풀스택' 카테고리의 다른 글
웹 저장소 및 HTTPS, CORS 보안(4) - Session (0) | 2024.09.08 |
---|---|
웹 저장소 및 HTTPS, CORS 보안(3) - Storage (0) | 2024.09.08 |
웹 저장소 및 HTTPS, CORS 보안(1) - Stateless/Stateful HTTP (0) | 2024.09.08 |
웹 브라우저 성능 개선 및 웹 서버 부하 완화(4) - 서버 부하 완화 및 보안(요청/응답 변조)을 위한 Proxy (0) | 2024.09.08 |
웹 브라우저 성능 개선 및 웹 서버 부하 완화(3) - HTTP Cache 동작(Cache-control 헤더) + 캐시 이점 (2) | 2024.09.07 |