크로스 사이트 요청 위조

Cross-Site Request Forgery (CSRF)

설명

크로스 사이트 요청 위조(Cross-Site Request Forgery, CSRF)는 악의적인 웹사이트가 사용자를 속여 다른 사이트에 대해 비정상적인 요청을 보내게 하는 공격입니다. 이는 사용자가 이미 인증된 세션을 이용하여 공격자가 의도한 작업(예: 데이터 변경, 삭제 등)을 수행하게 만듭니다.

잠재적 영향

  • 데이터 변조: 사용자의 의지와 상관없이 데이터가 변경될 수 있습니다.

  • 권한 상승: 공격자가 권한을 상승시켜 시스템을 조작할 수 있습니다.

  • 서비스 악용: 공격자가 서비스 기능을 악용하여 피해를 일으킬 수 있습니다.

해결 방법

  • CSRF 방지 토큰 사용: 모든 상태 변경 요청에 대해 CSRF 방지 토큰을 사용합니다.

  • 동일 출처 정책 사용: 요청의 출처를 검증하여 신뢰할 수 없는 출처에서의 요청을 차단합니다.

  • 보안 설정 강화: 서버와 애플리케이션의 보안 설정을 강화하여 CSRF 공격을 방지합니다.

취약한 코드 및 안전한 코드 예시

Unsafe Django code & Safe Django code

# Unsafe Django code
from django.http import HttpResponse

def my_view(request):
    if request.method == 'POST':
        # CSRF 검증 없이 요청 처리
        return HttpResponse("Request processed")

설명:

  • 취약한 코드: CSRF 검증 없이 POST 요청을 처리하여 CSRF 공격에 취약합니다.

  • 안전한 코드: @csrf_protect 데코레이터를 사용하여 CSRF 토큰을 검증합니다.

Unsafe Flask code & Safe Flask code

설명:

  • 취약한 코드: CSRF 검증 없이 POST 요청을 처리하여 CSRF 공격에 취약합니다.

  • 안전한 코드: flask_wtf.csrf.CSRFProtect를 사용하여 CSRF 토큰을 검증합니다.

Unsafe FastAPI code & Safe FastAPI code

설명:

  • 취약한 코드: CSRF 검증 없이 POST 요청을 처리하여 CSRF 공격에 취약합니다.

  • 안전한 코드: TrustedHostMiddleware와 출처 검증을 통해 신뢰할 수 없는 출처의 요청을 차단합니다.

참조

Last updated