쿠키설정

heyjk2212·2024년 1월 23일
0

면접준비

목록 보기
13/13

Secure 속성:

쿠키의 Secure 속성을 사용하면 해당 쿠키가 안전한 (Secure) 환경에서만 전송되도록 합니다.

이 설정은 HTTPS 연결에서만 쿠키가 전송되도록 하는 것을 의미합니다. 따라서 이 쿠키는 안전한 통신에서만 사용되어야 합니다.

HttpOnly 속성:

avaScript에서 쿠키에 접근할 수 없도록 합니다. 이는 XSS 공격을 방지하기 위한 중요한 설정입니다.

SameSite 속성:

SameSite 속성을 사용하면 쿠키가 어떤 상황에서 서버로 전송되어야 하는지를 제어할 수 있습니다. SameSite=None은 Cross-Site 요청에서도 쿠키를 전송할 수 있도록 허용합니다.

// Refresh token과 Access token 발급
const accessToken = jwt.sign(
  {
    userId: user.userId,
  },
  accessKey,
  { expiresIn: '2h' },
);

const refeshToken = jwt.sign(
  {
    userId: user.userId,
  },
  refreshKey,
  { expiresIn: '7d' },
);

// 쿠키를 보안적으로 더 안전하게 설정 (cookieOptions 객체 추가)
const cookieOptions = {
  httpOnly: true, // JavaScript를 통해 쿠키에 접근하는 것을 방지
  secure: true, // 안전한 https를 사용하는 경우에만 쿠키가 전송
  sameSite: 'None', // Cross-Site에서도 쿠키를 전송
}

// 쿠키전달
res.cookie('authorization', `Bearer ${accessToken}`, cookieOptions); // Bearer 토큰형식으로 token 전달
    
res.cookie('refreshtoken', `Bearer ${refeshToken}`, cookieOptions);

이 설정은 cookieOptions 객체에 저장되어 res.cookie 함수로 전달됩니다. 이렇게 하면 브라우저는 이 쿠키를 더 안전하게 다루게 됩니다.

단, sameSite: 'None'은 HTTPS를 사용하는 경우에만 적절합니다. secure 옵션과 함께 사용되어야 합니다.


SameSite 쿠키 속성

SameSite 쿠키 속성은 쿠키의 동작을 제한하여 Cross-Site Request Forgery (CSRF) 공격을 방지하는 데 도움을 주는 보안 기능입니다. SameSite의 값으로는 'None', 'Lax', 그리고 'Strict'가 있습니다

SameSite: 'None'

이 설정은 Cross-Site 요청에서도 쿠키를 전송하도록 허용합니다. 그러나, 이 옵션을 사용하기 위해서는 반드시 secure: true로 설정된 안전한 (HTTPS) 연결에서만 동작합니다. 이 설정을 사용하면 서로 다른 도메인 간에도 쿠키 전송이 가능하므로, 예를 들어 다른 도메인에서 리소스를 가져오는 경우에도 쿠키를 전송할 수 있습니다.

SameSite: 'Lax'

이 설정은 일부 상황에서 Cross-Site 요청에서 쿠키를 전송하도록 허용하지만, 탐색(navigation)과 같은 보다 민감한 상황에서는 쿠키 전송을 차단합니다. 이 설정이 기본값이며, 크로스 도메인에서는 쿠키 전송이 차단됩니다.

SameSite: 'Strict'

이 설정은 모든 Cross-Site 요청에서 쿠키를 전송하지 않도록 합니다. 엄격한 설정으로, 거의 모든 상황에서 쿠키 전송을 차단합니다.

SameSite: 'None'을 사용할 때는 secure: true로 설정된 HTTPS 연결에서만 동작하므로, 개발 환경이나 HTTPS를 지원하지 않는 환경에서는 사용하지 않는 것이 좋습니다. 이 옵션을 사용하면 Cross-Site에서도 쿠키를 전송할 수 있어야 하는 경우에 활용할 수 있습니다.


Cross-Site에서도 쿠키를 전송해야 하는 경우

다른 도메인에서의 API 요청이나 이미지 로딩 등이 해당됩니다. 이때 sameSite: 'None'을 사용하면 Cross-Site에서도 쿠키를 전송할 수 있습니다. 이를 통해 여러 도메인 간의 통신에서도 세션 정보 등을 공유할 수 있습니다.

단, 이렇게 설정할 때에는 반드시 secure: true로 설정된 안전한 (HTTPS) 연결에서만 동작하도록 해야 합니다. 그렇지 않으면 보안에 취약해질 수 있습니다.

특정 도메인 간에 쿠키를 공유해야 하는 경우에는 sameSite: 'None'을 고려할 수 있지만, 이 경우에는 반드시 secure: true로 안전한 연결에서만 동작하도록 설정해야 합니다.

요약하면, 대부분의 상황에서는 secure: true와 sameSite: 'Strict'를 사용하고, 특정 상황에서만 sameSite: 'None'을 고려하는 것이 좋습니다.

대부분의 경우에는 secure: true와 sameSite: 'Strict'를 사용하는 것이 안전한 방법입니다. secure: true는 HTTPS 연결에서만 쿠키를 전송하도록 하고, sameSite: 'Strict'는 Cross-Site에서는 쿠키를 전송하지 않도록 합니다. 이는 일반적으로 웹 애플리케이션의 보안을 강화하는 좋은 방법입니다.

profile
She can do it, He can do it, Why not me?

0개의 댓글