본문 바로가기
CS/보안

[보안] CSRF(Cross-Site Request Forgery, 교차 사이트 요청 위조) 보안 취약점 정의, XSS와의 차이점

by jangThang 2026. 5. 16.
반응형

CSRF(Cross-Site Request Forgery, 교차 사이트 요청 위조) 보안 취약점에 대해서 알아보고, 비슷한 개념인 XSS와도 비교해봅니다.

 

[ Contents ]

     

     

    1. CSRF(Cross-Site Request Forgery, 교차 사이트 요청 위조)

    사용자가 이미 인증된 상태(로그인)를 악용해, 공격자가 만든 사이트에서 사용자 모르게 다른 사이트에 요청을 보내는 공격

     

     CSRF는 다른 사이트에서 생성된 쿠키를 이용해서, 해당 쿠키로 요청을 보내는 공격 기법입니다.

     예를 들어, 은행 사이트에 다녀온 후라면 은행 로그인 세션이 남아 있습니다. 그러니 뒤로 가기나 다른 탭으로 은행 사이트를 열어도 로그인이 그대로 유지되어 있을 수 있죠.

     CSRF는 남아있는 다른 사이트 로그인 세션을 이용해서, 마치 사용자가 요청을 보낸 것처럼 꾸미는 공격입니다. XSS처럼 같은 사이트 내 악성 스크립트로 공격하는 기법과는 차이가 있습니다.

     

     

    2. CSRF 공격 예시

    1. 사용자 → bank.com 로그인 (세션/쿠키 생성)
    2. 사용자 → 공격자 사이트 방문
    3. 공격자 사이트 → 사용자 브라우저를 통해 bank.com에 요청 전송
    4. bank.com → 쿠키가 있으니 정상 요청으로 처리

     앞서 말한 예시를 도식과 시나리오로 표현했습니다.

      

    <!-- 공격자 페이지에 숨겨진 코드 -->
    <img src="https://bank.com/transfer?to=attacker&amount=1000000" />
    
    <!-- 또는 자동 제출 폼 -->
    <form action="https://bank.com/transfer" method="POST">
      <input type="hidden" name="to" value="attacker" />
      <input type="hidden" name="amount" value="1000000" />
    </form>
    <script>document.forms[0].submit();</script>

     공격자는 위와 같은 코드를 사이트에 숨겨둘 수 있으며, 악성 사이트에서 위조된 요청을 은행에 보낼 수 있죠. (attacker의 계좌에 1000000원 송금)

     물론 중요한 송금 처리를 GET 요청으로 할 리도 없으며, 대부분의 프레임워크에서 대응책을 포함하고 있습니다. 아래에서 방어방법을 알아봅니다.

     

     

     

    반응형

     

    3. 방어 방법

    1) CSRF 토큰 서버가 예측 불가능한 고유 토큰을 폼에 심어두고, 요청 시 검증

    <input type="hidden" name="csrf_token" value="a8f3k2m9x..." />

     

     

    2) SameSite 쿠키 속성 Strict 설정

    Set-Cookie: session=abc123; SameSite=Strict

     

     

     

    star가 되고나서 Tistory

    반응형

    댓글