[TIL | 내일배움캠프] CSRF

변채주·2025년 11월 28일

Spring

목록 보기
8/13

📅 TIL - 2025-11-28

✨ Keyword 요약

  • CSRF와 REST API에서 disable()로 설정하는 이유

💻 코딩테스트

🔹 문제(프로그래머스)

🔹 풀이 접근 방식

  • 사용한 알고리즘: Greedy Algorithm
  • 시간복잡도: O(n)
  • 예외 처리나 경계 조건
  1. 모든 직사각형을 가로가 긴 방향으로 배열의 요소를 뒤바꿔준다.
  2. 이차원 배열의 가로 길이의 최댓값과 세로길이의 최댓값을 구한다.
  3. 그렇게 구해진 최댓값끼리 곱하면 반환값 완성!

🔹 New / Review
오늘은 단순 계산이었기 때문에 생략!

🔹 코드 스니펫

class Solution {
    public int solution(int[][] sizes) {
        int x = 0;
        int y = 0;

        for(int[] len : sizes) {
            if(len[0] < len[1]) {
                int temp = len[1];
                len[1] = len[0];
                len[0] = temp;
            }
            x = Math.max(x, len[0]);
            y = Math.max(y, len[1]);
        }
        
        return x * y;
    }
}

🧑‍🏫 TIL

🔹 CSRF (Cross-Site Request Forgery)

  • 웹 애플리케이션에서 이미 인증된 사용자의 상태를 이용해 위조된 요청을 보내서 서버의 정보를 조회하거나 변경시키는 악의적인 공격을 의미한다. csrf는 Spring Security에선 CSRF 공격을 방어하기 위한 기능을 설정할 때 쓴다.

CSRF 방어 기술 : 요청에 추가 인증 데이터(토큰)를 내장하여 웹 애플리케이션이 승인되지 않은 위치에서 오는 요청을 감지할 수 있도록 하는 방식

쉽게 말해 요청이 들어왔을 때 인증된 토큰도 같이 제출하고, 서버에서 이를 검증하는 과정을 거치게 만드는 과정이다.
다양한 방어 방식은 위키피디아 설명을 참고했다.

내가 주목한 점은 이거다.

왜 REST API에서는 csrf.disable()로 설정할까?

csrf를 켜놓으면 공격을 방어할 수 있는데 왜 REST API를 설계할 때 보안 설정을 disable()로 설정하도록 배웠다. 왜일까?

  1. Spring Security에는 이 CSRF가 기본적으로 활성화되어 있다.
  2. CSRF는 브라우저가 자동으로 세션 쿠키를 요청에 포함하는 특성을 악용한다. 그러나 Spring 기반 프로젝트는 Spring Security 프레임워크와 JWT 인증을 사용하므로 브라우저가 쿠키를 전송하는 구조가 아니다.
  3. 'JWT을 적용 = 토큰 기반 인증 방식'을 사용하기 때문에 세션이 필요없다.

➡️ (결론) REST API는 CSRF 공격 조건에 포함되지 않으므로 disable()로 설정해도 된다.

그러나 브라우저 쿠키 기반으로 인증이 필요하게 구성할 경우 CSRF를 사용해야 할 수 있다.


📝 회고 및 메모

  • 언제나 개발은 케이스에 맞게 설정하는 것!
profile
우당탕탕얼레벌레 개발 일지

0개의 댓글