ASAC/복습 내용정리

[ASAC 7기] Cookie, Storage, Session과 HTTPS와 CORS 보안

웡지 2024. 12. 18. 15:32

본 포스팅은 수업내용의 단순 정리글입니다. (작성중)

 

 

들어가며 : 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 속성도 함께 설정해야 함.)
    • 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.
            • 크로스 도메인 인증이나 외부 리소스 호출에 필요할 때 사용.

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