Express에서의 쿠키 보안 옵션: Secure, HttpOnly, SameSite 설정

Express에서의 쿠키 보안 옵션: Secure, HttpOnly, SameSite 설정

웹 애플리케이션의 보안을 강화하는 데 있어 쿠키의 옵션 설정은 매우 중요합니다. 이 글에서는 Express.js 환경에서 쿠키의 보안 옵션인 Secure, HttpOnly, 그리고 SameSite를 설정하는 방법에 대해 자세히 알아봅니다.

쿠키 옵션의 중요성

쿠키는 사용자 인증, 세션 관리, 사용자 선호 설정 저장 등에 널리 사용됩니다. 하지만 쿠키가 제대로 보호되지 않으면 XSS(크로스 사이트 스크립팅)나 CSRF(크로스 사이트 요청 위조)와 같은 보안 위협에 노출될 수 있습니다. 따라서, 쿠키를 안전하게 관리하는 것이 매우 중요합니다.

Secure 쿠키

Secure 속성이 설정된 쿠키는 HTTPS를 통해서만 전송됩니다. 이는 쿠키가 평문 HTTP를 통해 전송될 때 발생할 수 있는 중간자 공격(man-in-the-middle attack)을 방지하는 데 도움이 됩니다.

// session 미들웨어를 초기화합니다. 이는 세션 관리를 위해 필요합니다.
app.use(session({
  secret: 'your_secret_key', // 세션을 암호화하기 위한 비밀 키입니다.
  cookie: {
    secure: true, // 쿠키는 HTTPS 프로토콜을 통해서만 전송됩니다.
    maxAge: 60000 // 쿠키의 유효 시간을 밀리초 단위로 설정합니다. 여기서는 60000ms, 즉 1분입니다.
  }
}));

위 코드는 Express 애플리케이션에서 세션 쿠키를 설정하는 방법을 보여줍니다. secret은 세션 쿠키를 암호화하는 데 사용되며, secure: true는 쿠키가 안전한 HTTPS 연결을 통해서만 전송되도록 합니다. maxAge는 쿠키의 수명을 제어합니다.

HttpOnly 쿠키

HttpOnly 속성이 설정된 쿠키는 JavaScript를 통해 접근할 수 없습니다. 이 속성은 클라이언트 측 스크립트가 쿠키를 읽어 공격에 사용하는 것을 방지하므로 XSS 공격을 어렵게 만듭니다.

// session 미들웨어를 설정합니다. 세션 관리를 위해 사용됩니다.
app.use(session({
  secret: 'your_secret_key', // 세션을 암호화하기 위한 비밀 키입니다.
  cookie: {
    httpOnly: true, // 쿠키가 HTTP(S)를 통해서만 접근 가능하게 설정합니다. 클라이언트 사이드 스크립트에서는 접근할 수 없습니다.
    maxAge: 60000 // 쿠키의 유효 시간을 설정합니다. 여기서는 60000ms, 즉 1분입니다.
  }
}));

위 코드는 세션 쿠키를 설정하면서 httpOnly 옵션을 활성화합니다. 이 옵션은 쿠키가 클라이언트 사이드 스크립트에 의해 접근되는 것을 방지하여, XSS 공격으로부터 어느 정도 보호할 수 있습니다. maxAge는 쿠키의 생존 기간을 밀리초 단위로 설정합니다.

SameSite 쿠키

SameSite 속성은 쿠키가 같은 사이트의 요청에만 전송되도록 합니다. 이 속성은 CSRF 공격을 방지하는 데 효과적입니다. SameSite 옵션은 ‘Strict’, ‘Lax’, ‘None’으로 설정할 수 있습니다.

// session 미들웨어를 사용하여 세션을 설정합니다.
app.use(session({
  secret: 'your_secret_key', // 세션을 암호화하기 위한 비밀 키입니다.
  cookie: {
    sameSite: 'strict', // 쿠키의 SameSite 속성을 'strict'로 설정하여, 같은 도메인에서만 쿠키가 전송되도록 합니다.
    maxAge: 60000 // 쿠키의 최대 유효 기간을 설정합니다. 여기서는 60000ms, 즉 1분입니다.
  }
}));

코드에서는 sameSite 옵션을 사용하여 쿠키의 보안 수준을 높입니다. sameSitestrict로 설정하면, 쿠키가 현재 웹사이트의 요청에서만 보내집니다, 이는 CSRF 공격을 방지하는 데 도움을 줄 수 있습니다. maxAge는 쿠키가 유효한 시간을 밀리초 단위로 정의합니다.

  • Strict: 가장 제한적인 설정으로, 쿠키는 오직 요청이 현재 사이트에서 발생했을 때만 보내집니다. 다른 사이트에서의 링크 클릭 등을 통한 요청에서는 쿠키를 전송하지 않습니다.
  • Lax: Strict보다 덜 제한적이며, 사용자가 외부 사이트에서 오는 경우에도 일부 요청에 대해서 쿠키를 허용합니다. 예를 들어, 사용자가 외부 사이트에서 링크를 클릭하여 웹사이트로 이동하는 경우 쿠키가 전송됩니다.
  • None: 모든 크로스 사이트 요청에서 쿠키를 전송하도록 허용합니다. 이 설정을 사용할 때는 반드시 `secure` 플래그도 설정해야 하며, 쿠키는 HTTPS를 통해서만 전송됩니다.

이러한 옵션들을 통해 Express 애플리케이션에서 쿠키를 보다 안전하게 사용할 수 있습니다. 보안 설정을 올바르게 적용하는 것이 애플리케이션의 전반적인 보안을 향상시키는 데 중요합니다.

더 자세한 정보를 원하시면, Express 공식 문서의 보안 모범 사례를 참조하세요.

관련 이전 게시글

이 글이 도움이 되셨다면 공유 부탁 드립니다.

위로 스크롤