Skip to content

Latest commit

 

History

History
66 lines (55 loc) · 3.78 KB

JWT-및-보안-대책-정리.md

File metadata and controls

66 lines (55 loc) · 3.78 KB

트리 형태로 정리된 JWT, 액세스 토큰, 리프레시 토큰, HttpOnly 쿠키, CSRF 방어, SameSite 개념

1. 인증 및 보안 체계 (Authentication & Security)

  • 1.1 JWT (JSON Web Token)
    JWT는 클라이언트와 서버 간의 무상태 인증을 위한 토큰 기반의 표준화된 방식.
    • 1.1.1 액세스 토큰 (Access Token)
      JWT를 사용해 발급되는 짧은 유효 기간의 토큰으로, 요청 시마다 인증을 위해 사용.

      • 저장 위치: 클라이언트 측에 저장 (로컬 스토리지, 세션 스토리지, 또는 HttpOnly 쿠키).
      • 만료 시간: 15분 ~ 1시간 정도로 설정해 탈취 피해 최소화.
    • 1.1.2 리프레시 토큰 (Refresh Token)
      액세스 토큰 만료 시, 새로운 액세스 토큰 발급을 위해 사용되는 긴 유효 기간의 토큰.

      • 저장 위치: HttpOnly 쿠키에 저장하여 JavaScript 접근 차단.
      • 만료 시간: 7일 ~ 30일 등 긴 시간 동안 유지.
      • 역할: 자동 재로그인 기능, 사용자 경험 향상.

2. JWT 사용 시 보안 강화

  • 2.1 HttpOnly 쿠키
    쿠키를 JavaScript에서 접근할 수 없도록 설정하여 XSS(크로스 사이트 스크립팅) 공격을 방지.
    • 2.1.1 HttpOnly 속성: 클라이언트 측의 JavaScript에서 쿠키를 읽지 못하도록 차단.
    • 2.1.2 Secure 속성: 쿠키가 HTTPS 연결에서만 전송되도록 보장.

3. CSRF 방어 전략

  • 3.1 CSRF (Cross-Site Request Forgery) 방어
    사용자의 권한을 도용해 악의적인 요청을 서버에 전송하는 CSRF 공격을 방지하는 전략.
    • 3.1.1 CSRF 토큰 (Csurf)
      서버가 각 요청마다 고유한 CSRF 토큰을 발급하고, 요청 시 클라이언트가 해당 토큰을 포함하여 전송.

      • 역할: 모든 요청에서 요청의 정당성 검증.
      • 클라이언트-서버 간 상호작용: CSRF 토큰을 헤더 또는 폼 데이터에 포함해 전송.
    • 3.1.2 SameSite 쿠키
      쿠키가 크로스 사이트 요청에서 전송되지 않도록 설정하여 CSRF 공격을 방지.

      • Strict: 동일 사이트 요청에서만 쿠키 전송.
      • Lax: 기본적으로 차단하되, 일부 안전한 요청에서는 허용.
      • None: 크로스 사이트 요청에서도 쿠키 전송 가능 (단, secure 속성 필수).
      • 역할: 크로스 사이트 요청 자체를 차단함으로써 CSRF 위험을 줄임.

4. 최종 보안 조합

  • 4.1 JWT: 클라이언트-서버 간 인증 처리.
  • 4.2 액세스 토큰: 짧은 만료 시간으로 사용자의 인증을 처리.
  • 4.3 리프레시 토큰: 액세스 토큰 만료 시 새로운 액세스 토큰을 발급.
  • 4.4 HttpOnly 쿠키: 리프레시 토큰을 안전하게 저장.
  • 4.5 CSRF 방어: CSRF 토큰을 통해 요청의 정당성을 검증하고, SameSite 속성으로 크로스 사이트 요청을 제한.

트리 구조 요약

1. **인증 및 보안 체계 (JWT)**  
   ├── **액세스 토큰** (짧은 만료 시간)  
   └── **리프레시 토큰** (긴 만료 시간, HttpOnly 쿠키에 저장)

2. **JWT 사용 시 보안 강화**  
   └── **HttpOnly 쿠키** (XSS 방어)

3. **CSRF 방어 전략**  
   ├── **CSRF 토큰** (요청의 정당성 검증)  
   └── **SameSite 쿠키** (크로스 사이트 요청 차단)

4. **최종 보안 조합**  
   ├── **JWT**  
   ├── **액세스 토큰**  
   ├── **리프레시 토큰** (HttpOnly 쿠키에 저장)  
   └── **CSRF 방어** (CSRF 토큰 + SameSite 쿠키)