티스토리 뷰

Django를 이용하여 REST API를 설계할 때 settings.py 에서 INSTALLED_APPS 하단에 MIDDLEWARE 부분 중 몇몇 기능을 비활성화 처리하는데 그 중 이 'django.middleware.csrf.CsrfViewMiddleware' 부분에 대해 알아보려고 한다. 

 

 

CSRF - Cross Site Request Forgeries

사이트 간 요청 위조(또는 크로스 사이트 요청 위조)는 웹사이트 취약점 공격의 하나로, 인증된(권한을 가진) 사용자가 자신의 의도와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록) 요청하게 하는 공격(해킹)을 말한다.

 

예를 들면 

로그인과 같은 사이트에 인증된 사용자에게 해당 웹의 요청 중 하이퍼링크에 나쁜 코드를 심어 인증된 사용자에게 전송한다.

해당 하이퍼링크를 클릭하면 사용자 본인도 모르게 공격자가 심어놓은 나쁜 코드를 서버에 전송하게 된다.

서버는 인증된 사용자의 요청으로 생각하여, 요청에 대해 응답한다.

이미지 출처 - portswigger

 

Django의 CSRF 보호 작동방식

Django는 이 CSRF에 대해 대응하기 위해 CSRF 토큰을 쿠키에 저장은 방식을 채택했다고한다.

(django 공식문서를 살펴보면 CSRF 토큰을 쿠키에 저장하는 방식은 django에서 권장되는 방식이고 다른 웹 프레임워크들에서는 세션에 저장하는 방식을 더 흔하게 사용한다고 한다.)

 

프로젝트 초기 설정 시 settings.py 에  MIDDLEWARE의 여러 미들웨어 중 'django.middleware.csrf.CsrfViewMiddleware' 부분이 CSRF를 방지해주기 때문에 모든 POST 요청마다 이 CSRF 토큰을 체크하게 되어 있다.

(REST API 설계 시 일반적으로 JWT를 주로 사용하기 때문에 settings.py 에서 해당 미들웨어 부분을 주석 처리하여 django의 CSRF protection을 비활성화 처리한다.)

 

 


이미지 및 정보 및 전문 출처 - django, portswigger

 

'study > Django' 카테고리의 다른 글

Unit Test 작성  (0) 2023.03.02
Django - Query string 2  (0) 2022.09.07
Django - Query String  (0) 2022.08.17
Django - 동일한 테이블을 참조하는 ForeignKey  (0) 2022.07.31
Django -path Variable  (0) 2022.07.24
댓글