크로스 사이트 요청 위조
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