FastAPI 쿠키 SameSite 설정: HttpOnly, Secure까지 한 번에 정리

👁 조회 17

Written by

in

FastAPI를 활용하여 웹 애플리케이션에서 쿠키를 설정하는 방법과 보안 속성을 이해하는 것은 매우 중요합니다. 이 글에서는 FastAPI에서 쿠키를 설정하는 기본 코드와 함께, 보안 강화를 위한 다양한 속성들을 살펴보겠습니다.

FastAPI에서 쿠키 설정하기

FastAPI에서는 Response 객체를 사용하여 쿠키를 설정할 수 있습니다. 아래는 로그인 후 쿠키를 설정하는 기본 코드 예시입니다:

from fastapi import FastAPI, Response

app = FastAPI()

@app.post("/login")
def login(response: Response):
    response.set_cookie(
        key="session",
        value="session-token-value",
        max_age=3600,
        httponly=True,
        secure=True,
        samesite="lax",
    )
    return {"message": "logged in"}

이 코드는 사용자가 로그인할 때 세션 쿠키를 설정하는 방법을 보여줍니다. max_age는 쿠키의 수명을 초 단위로 설정하며, httponly, secure, samesite는 각각 보안 속성을 강화하는 데 사용됩니다.

Starlette 문서 기준으로 set_cookie의 기본값은 httponly=False, secure=False, samesite="lax"입니다. 즉 HttpOnly와 Secure는 따로 켜지 않으면 적용되지 않으므로 직접 지정해야 합니다.

HttpOnly 속성의 이해

HttpOnly 속성은 자바스크립트가 Document.cookie를 통해 쿠키에 접근하지 못하도록 막아줍니다. 이는 XSS(크로스 사이트 스크립팅) 공격을 방지하는 데 유용합니다. 그러나 자바스크립트가 시작한 XMLHttpRequest나 fetch 요청에는 여전히 쿠키가 전송될 수 있습니다.

FastAPI 쿠키 SameSite 옵션의 차이

SameSite 속성은 쿠키가 교차 사이트 요청에 포함될지를 제어합니다. 각 옵션의 차이는 다음과 같습니다:

  • Strict: 같은 사이트에서 시작된 요청에만 쿠키를 전송합니다.
  • Lax: 같은 사이트 요청에는 전송하고, 교차 사이트 요청은 최상위 탐색(주소 이동)이면서 안전한 메서드를 쓸 때만 전송합니다. POST, PUT, DELETE는 제외됩니다.
  • None: 모든 요청에 쿠키를 전송하며, 이 경우 Secure 속성도 반드시 설정해야 합니다.

Secure 속성과 localhost 환경

Secure 속성은 HTTPS 스킴으로 요청할 때만 쿠키를 서버에 전송합니다. 이는 중간자 공격(MITM)을 방지하는 데 유용합니다. http: 사이트에서는 Secure 속성이 붙은 쿠키를 설정할 수 없지만, localhost에서는 이 https 요구가 적용되지 않습니다. 그래서 로컬 개발 중에도 같은 코드를 그대로 쓸 수 있습니다.

쿠키 만료 설정

쿠키의 만료는 Max-Age와 Expires 속성을 통해 설정할 수 있습니다. Max-Age는 초 단위로 쿠키의 수명을 설정하며, Expires는 HTTP-date 형식으로 만료 시점을 지정합니다. 두 속성이 모두 설정되면 Max-Age가 우선합니다.

프론트엔드와 백엔드 도메인 차이

프론트엔드와 백엔드가 다른 도메인을 사용할 경우, SameSite=None을 설정하여 교차 사이트 요청에 쿠키를 전송할 수 있습니다. 이때 Secure 속성도 함께 설정해야 합니다.

로그아웃 시 쿠키 삭제하기

로그아웃 시에는 아래와 같이 delete_cookie 메서드를 사용하여 쿠키를 삭제할 수 있습니다:

@app.post("/logout")
def logout(response: Response):
    response.delete_cookie(key="session", path="/")
    return {"message": "logged out"}

쿠키 보안 설정 체크리스트

  • HttpOnly 속성을 사용하여 XSS 공격을 방지합니다.
  • Secure 속성을 사용하여 HTTPS를 통해서만 쿠키를 전송합니다.
  • SameSite 속성을 적절히 설정하여 CSRF 공격을 방지합니다.
  • Max-Age와 Expires를 통해 쿠키의 수명을 관리합니다.
  • localhost에서는 Secure의 https 요구가 적용되지 않지만, 실제 배포 환경에서는 HTTPS를 사용합니다.

이 정보를 통해 FastAPI에서 쿠키를 안전하게 관리하는 방법을 이해하고 구현할 수 있습니다.

FAQ

Q1: FastAPI에서 쿠키를 어떻게 설정하나요?
FastAPI에서는 Response 객체의 set_cookie 메서드를 사용하여 쿠키를 설정할 수 있습니다. 쿠키의 키, 값, 만료 시간, 보안 속성을 지정할 수 있습니다.

Q2: HttpOnly 속성은 어떤 역할을 하나요?
HttpOnly 속성은 자바스크립트가 쿠키에 접근하지 못하도록 하여 XSS 공격을 방지합니다. 하지만 자바스크립트가 시작한 요청에는 쿠키가 전송될 수 있습니다.

Q3: Secure 속성은 언제 사용해야 하나요?
Secure 속성은 HTTPS를 통해서만 쿠키를 전송하도록 하여 보안을 강화합니다. 실제 배포 환경에서는 HTTPS를 사용하는 것이 중요합니다.

관련 글


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다