본 포스팅은 수업내용의 단순 정리글입니다. (작성중)
들어가며 : 04. 웹 브라우저와 웹 서버의 저장소 및 HTTPS, CORS 보안
이번 포스팅에서는 웹 브라우저 내의 저장소인 Cookie와 Storage에 대해 알아보고, 웹 서버 내의 저장소인 Session에 대해 알아본다. 추가로 웹 보안적인 측면에서 HTTPS의 등장배경, 동작원리를 알아보고 CSRF가 뭔지, 그를 막기 위한 CORS 정책에 대해 알아보자.
01. Cookie : 웹 브라우저 내 저장
04-01. 웹 브라우저 내 저장 : 1) Cookie
무엇을 배웠는가?
HTTP는 기본적으로 Stateless한 프로토콜이지만, Cookie와 Session을 활용해 Stateful한 동작을 구현할 수 있다. Stateless, stateful 용어에 대해 알아보았고, Cookie 사용의 기준, 유효시간, 보안에 관련해서 알아보았다. 보안 관련해서 어떤 공격을 쿠키의 어떤 방법으로 막을 수 있는지 알아보았다.
- HTTP 캐시: 성능 최적화, 리소스 재사용.
- 쿠키: 사용자 상태 저장, 세션 관리.
1) HTTP는 기본적으로 Stateless이다.
웹 서버 입장에서 생각해보자.
- stateless : 매 요청이 어떤 웹 브라우저가 보낸 것인지 알 수 없다.
- stateful : 웹 서버가 이전에 요청받았던 웹 브라우저와 현재 요청의 웹 브라우저를 구별할 수 있다.
2) Stateful HTTP인 Cookie(브라우저), Session(서버)을 알아보자.
이 요청자 정보 를 어디에 저장하는지에 따라 Cookie 혹은 Session 으로 방법론이 나뉜다
- 웹 브라우저에 저장 : Cookie (클라이언트측)
- 쿠키는 어떤 값이든 가능하나, 일반적으로 노출 방지를 위해 인간이 이해할 수 있는 형태가 아닌걸로
- 웹 서버에 저장 : Session (서버측, 쿠키를 안쓰는게 아니다 웹 브라우저 쿠키에 SESSION_ID 를 저장)
- 웹 브라우저에 저장할 수 없을 정도로 크거나 복합적인 정보인 경우
- 웹 브라우저에 저장할 수 없는 민감 정보인 경우
2-1) 쿠키는 stateless인가 stateful인가?
3) 쿠키에 대해 알아보자.
- 쿠키 사용의 기준
- 해당 쿠키를 어떤 요청에 보낼지 = Domain + Path
- 쿠키 유효시간 MaxAge / Expires
- 명시되어 있다면 Persistent Cookie 지속쿠키 : 창이 닫히는 순간 소멸되는 쿠키
- 명시되어 있지않다면 Session Cookie 세션쿠키 : 로그인한 뒤 -> 로그아웃하기까지
4) 쿠키 보안
- HttpOnly
- 웹 서버에서 쿠키를 설정할 때 해당 옵션을 true로 설정할 경우 아래와 같다.
- 방어 가능한 것:
- JavaScript가 document.cookie를 통해 쿠키에 접근하지 못하게 함.
- 공격자가 XSS를 통해 브라우저에서 쿠키를 탈취하려는 시도를 막음.
- 방어 불가능한 것:
- XSS로 인한 악성 스크립트 실행 자체:
- 공격자가 HTML DOM 조작, AJAX 요청 등을 통해 다른 데이터를 탈취하거나 악성 행동을 할 수 있음.
- 서버로 요청이 자동 전송되는 쿠키는 HttpOnly 설정과 상관없이 전송됩니다.
(e.g., CSRF 공격 시 쿠키가 전송되므로 SameSite 속성도 함께 설정해야 함.)
- XSS로 인한 악성 스크립트 실행 자체:
- Secure
- HTTPS가 아닌 이상 서버에 쿠키를 담지 않겠다.는 설정
- HTTPS는 데이터를 암호화해서 전송하므로, 네트워크 상에서 데이터를 가로채더라도 공격자가 내용을 알아낼 수 없다.
- MITM(Man-in-the-middle)방지 : 요청(클라이언트)-응답(서버) 사이에서 요청, 응답 탈취
- SameSite
- 웹 브라우저 주소란에 표시된 도메인과 동일한 도메인에 대한 요청(API)시에만 쿠키 전송
- CSRF 방지 : 유저가 의도하지 않았는데, 해커가 심은 스크립트에 의해 크로스 사이트에 요청 전달
- Cross-Site Request Forgery 사이트 간 요청 위조
- !크로스 사이트와 동일 사이트의 정의
- 크로스 사이트 : www.web.dev ≠ static.another.com / 서드파티 쿠키
- 동일 사이트 : www.web.dev = static.web.dev / 퍼스트파티 쿠키
- samesite 각 옵션의 동작
- SameSite=Strict
- 타 도메인 요청에서는 쿠키를 전송하지 않습니다.
- 브라우저가 리소스를 요청할 때, 도메인이 다르면 쿠키를 완전히 차단합니다.
- 예시
- 사용자가 example.com에서 로그인했을 때 생성된 쿠키가 Strict로 설정된 경우:
- 사용자가 another.com에서 example.com으로 데이터를 요청하면 쿠키가 전송되지 않음.
- CSRF 공격 방지에 가장 강력하지만, 사용자 경험이 제한적일 수 있음.
- SameSite=Lax
- GET 요청이나 일부 안전한 요청(GET, HEAD, OPTIONS)에서는 쿠키를 전송합니다.
- 하지만, POST 요청과 같은 위험한 요청에는 쿠키를 전송하지 않습니다.
- 예시
- 사용자가 example.com에서 로그인했을 때 생성된 쿠키가 Lax로 설정된 경우:
- 사용자가 another.com에서 링크를 클릭하여 example.com으로 이동 → 쿠키 전송 O.
- 사용자가 another.com에서 POST 요청을 보내 example.com에 데이터를 전송 → 쿠키 전송 X.
- SameSite=None
- 모든 요청에서 쿠키를 전송합니다.
- 주의: None 속성을 사용하려면 Secure 속성을 반드시 추가해야 하며, HTTPS에서만 작동합니다.
- 예시
- 사용자가 example.com에서 로그인했을 때 생성된 쿠키가 None으로 설정된 경우:
- 사용자가 another.com에서 모든 종류의 요청을 보냄 → 쿠키 전송 O.
- 크로스 도메인 인증이나 외부 리소스 호출에 필요할 때 사용.
- SameSite=Strict
4-1) 자바의 안전한 쿠키 설정 예제
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
public void setSecureCookie(HttpServletResponse response) {
// 1. 쿠키 생성
Cookie cookie = new Cookie("sessionId", "secure-random-session-id");
// 2. 보안 속성 설정
cookie.setHttpOnly(true); // JavaScript로 쿠키 접근 차단 (XSS 방지)
cookie.setSecure(true); // HTTPS에서만 쿠키 전송
cookie.setPath("/"); // 쿠키의 유효 경로 (루트 경로에서 사용 가능)
cookie.setMaxAge(3600); // 쿠키 만료 시간 (3600초 = 1시간)
// SameSite 속성 설정 (Java에서는 직접 처리해야 함)
response.setHeader("Set-Cookie", String.format(
"%s=%s; Path=%s; HttpOnly; Secure; SameSite=Strict",
cookie.getName(), cookie.getValue(), cookie.getPath()
));
// 3. 응답에 쿠키 추가
response.addCookie(cookie);
}
5) 그림으로 알아보는 웹 보안 관련 공격기법인 CSRF와 XSS, 이를 해결하기 위한 Cookie의 SameSite.
(후에 또 배운다.)
6) Cookie의 단점
- 민감 정보들이 안전하지 않은채로 저장
- 웹 브라우저간 공유 불가 : 웹 브라우저 단위의 저장소이다보니 지역성 문제
- 쿠키는 Domain + Path 만 일치한다면 해당 웹 서버로 모든 쿠키를 담아 쿠키로 저장하려는 정보량이 많아질수록 → 요청 크기가 커진다
- 때문에 웹 서버에게 전송할 필요없는 정보의 경우 웹 스토리지 사용을 하는 게 좋다.
02. Storage : 웹 브라우저 내 저장
04-02. 웹 브라우저 내 저장 : 2) Storage
무엇을 배웠는가?
1) 웹 브라우저 내 저장소 Storage 와 Cookie 목적 차이
2) Storage 의 종류 : Storage 유효시간에 따라
3) Storage 의 종류별 쓰임
4) 웹 브라우저 내 저장소 Storage 와 Cookie 비교표
03. 웹 서버 내 저장 : Session
04-03. 웹 서버 내 저장 : Session
무엇을 배웠는가?
1) Cookie 의 단점 → Session 의 장점
04. 웹 보안 : HTTPS
04-04. 웹 보안 : HTTPS (HTTP Secure, TLS) = 웹 통신 내 End-to-End 회선 보호
무엇을 배웠는가?
1)
05. 웹 보안 : CSRF 를 막기 위한 CORS 정책
04-05. 웹 보안 : CORS = CSRF(유저 비의도적 요청) 부분 방지를 위한 웹 브라우저 정책
무엇을 배웠는가?
1) 웹 브라우저의 보안정책 : SOP에서 CORS
2) CSRF (Cross-Site Request Forgery)란??
3) CORS (Cross Origin Resource Sharing)란?
4) 위의 내용을 그림으로 알아보자.
5) CORS 서버 측 적용 방법 : Header
'ASAC > 복습 내용정리' 카테고리의 다른 글
[ASAC 07기] 자바스크립트 기본, 심화 문법 및 엔진 동작원리를 알아보자 (0) | 2024.12.30 |
---|---|
[ASAC 7기] Git에 관한 모든 것 (0) | 2024.12.30 |
[ASAC 7기] HTTP Cache와 Proxy (0) | 2024.12.16 |
[ASAC 7기] 웹 개발 백엔드 : 운영체제, 서버, 배포방법론 (0) | 2024.12.12 |
[ASAC 7기] 프론트엔드 관점에서 웹 개발을 알아보자 (1) | 2024.12.11 |