공부기록

csrf_token 본문

Programming/django

csrf_token

코타쿠 2021. 5. 16. 19:12

CSRF Attack (Cross Site Request Fogery Attack)

csrf 공격은, 위해한 웹사이트가 POST와 같은 액션을 사용할 때, 인증된 사용자의 인증정보를 무단으로 사용하는 것을 말한다.
이 때문에 사용자는 자신이 의도하지 않은 요청을 하게 된다.

예를 들어, 공격자가 사이트의 게시물에 어떤 사이트의 API를 이용하여 조작된 HTML을 만들면, 인증된 사용자가 그것을 사용하여 자신은 의도치 않았던 행위를 하는 것이다.

CSRF Token

django는 csrf 공격을 막기 위해 csrf token을 사용한다. 사용자가 post 요청이 있는 template을 요청하면, 장고는 cookie에 secret을 보내고, hidden form의 필드 'csrfmiddlewaretoken'에는 serect + mask 한 정보를 랜더링한다.

사용자가 post를 하면, 쿠키와 함께 csrfmiddlewaretoken이 함께 날아간다. django는 이것을 프로세싱하여 쿠키의 serect과 csrfmiddlewaretoken의 프로세싱된 값이 같은지 확인하는 것이다.

같다면 다음 middleware로 진행하고 그렇지 않다면 403에러를 띄우게 된다.

csrf_token이 post의 data 필드값에 필요하기 때문에 django의 서버가 직접 랜더링한 html만이 유효하게 되어 csrf 공격을 막을 수 있게된다.

참고자료

https://docs.djangoproject.com/en/3.2/ref/csrf/

https://www.squarefree.com/securitytips/web-developers.html#CSRF

https://portswigger.net/web-security/csrf

https://www.whiteship.me/-ec-8a-a4-ed-94-84-eb-a7-81--ec-8b-9c-ed-81-90-eb-a6-ac-ed-8b-b0-3-2-0-rc1--ed-95-98-ec-9d-b4-eb-9d-bc-ec-9d-b4-ed-8a-b8-csrf--eb-b0-a9-ec-96-b4/

https://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/

'Programming > django' 카테고리의 다른 글

배포 환경 별 세팅  (0) 2021.05.17
Why Django?  (0) 2021.05.17