Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

코딩 이래요래

위클리 페이퍼 - 14주차 본문

위클리 페이퍼

위클리 페이퍼 - 14주차

강범호 2025. 8. 11. 08:34

Q. Spring 기반 웹 애플리케이션에서 발생할 수 있는 4가지 주요 보안 공격 (CSRF, XSS, 세션 고정, JWT 탈취)에 대해 설명하고, 각각에 대한 Spring Security 또는 일반적인 대응 전략을 설명하세요.

CSRF (Cross-Site Request Forgery, 사이트 간 요청 위조)

 

  • 사용자가 의도하지 않은 요청을 서버로 보내게 하는 공격
  • 공격자는 피해자의 인증 정보(세션, 쿠키) 를 악용해 특정 행위를 실행시킴
  • 예) 사용자가 로그인한 상태에서 악성 페이지 방문 → 자동으로 송금 요청 전송

Spring Security 대응 방법

1. CSRF 토큰 사용 (기본 활성화)

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}

 

 

2. POST, PUT, DELETE 요청 시 토큰 검증

3. SameSite 쿠키 설정으로 CSRF 위험 최소화

 

SameSite?

  • 쿠키가 어떤 도메인에서만 사용될 지 설정하는 옵션

3가지 옵션

  • Strict: 반드시 같은 도메인에서만 사용 가능 (하위 도메인 포함)
  • Lax: 같은 도메인에서만 사용 가능하지만, 유저가 링크를 클릭해서 접속하거나 하는 경우에는 다른 도메인에서도 사용 가능 (기본 값)
  • None: 다른 도메인에서도 사용 가능. Secure 옵션과 함께 사용해야 함.

XSS (Cross-Site Scripting, 크로스 사이트 스크립팅)

 

  • 웹 페이지에 악성 JavaScript를 삽입해 클라이언트에서 실행시키는 공격
  • 주로 게시판, 댓글 입력창 등 사용자 입력값을 필터링하지 않을 때 발생
  • 예) <script>alert('해킹');</script>

Spring 및 일반 대응 방법

1. 입력값 필터링 / 이스케이프 처리

String safeInput = HtmlUtils.htmlEscape(userInput);

 

 

2. HTTP 응답 헤더 설정

http.headers().xssProtection().and().contentSecurityPolicy("script-src 'self'");

세션 고정(Session Fixation)

 

  • 공격자가 미리 발급된 세션 ID를 클라이언트에게 강제로 사용하게 한 뒤, 해당 세션을 탈취하는 공격
  • 예) 로그인 전 발급받은 세션 ID를 로그인 후에도 계속 사용

1. 로그인 시 세션 ID 재발급

http.sessionManagement()
    .sessionFixation().migrateSession(); // 기본값, 세션 새로 생성

 

 

2.로그아웃 시 세션 무효화

http.logout().invalidateHttpSession(true).deleteCookies("JSESSIONID");

JWT 탈취(JWT Hijacking)

  • JWT(JSON Web Token)가 중간에서 탈취되면, 해당 토큰으로 누구나 인증된 사용자 행세 가능
  • 주로 로컬 스토리지 / 세션 스토리지 보관 시 XSS에 의해 탈취될 수 있음

 

  1. HTTP Only + Secure 쿠키 사용
    • 자바스크립트 접근 차단
  2. 짧은 만료 시간 + Refresh Token 사용
  3. 토큰 서명(Signature) 검증
  4. 토큰 무효화 전략 (Blacklist, Redis 등)

Q. JWT(JSON Web Token)의 구조와 각 구성 요소가 어떤 역할을 하는지 구체적으로 설명하세요.

JWT(JSON Web Token)의 구조

JWT는 .으로 구분된 3개의 문자열로 구성됨

xxxxx.yyyyy.zzzzz
Header.Payload.Signature

 

Header (헤더)

  • 토큰의 타입(JWT)과 서명 알고리즘(HS256, RS256 등) 명시
  • 예시:
{
  "alg": "HS256",
  "typ": "JWT"
}
 

Payload (페이로드)

  • 인증 주체 정보와 토큰의 클레임(Claim) 저장
  • 예시:
{
  "sub": "user123",
  "role": "ADMIN",
  "iat": 1672502400,
  "exp": 1672588800
}

 

  • sub : 사용자 식별자
  • iat : 발급 시각
  • exp : 만료 시각

Signature (서명)

  • Header + Payload 를 비밀키로 서명한 값
  • 무결성 검증 역할
HMACSHA256(
    base64UrlEncode(header) + "." + base64UrlEncode(payload),
    secretKey
)

 

 

'위클리 페이퍼' 카테고리의 다른 글

위클리 페이퍼 - 13주차  (2) 2025.08.04
위클리 페이퍼 12주차  (2) 2025.07.07
위클리 페이퍼 11주차  (3) 2025.06.30
위클리 페이퍼 10주차  (5) 2025.06.23
위클리 페이퍼 - 9주차  (2) 2025.06.02