CSRF 공격&CSRF Token // django form(4)

2022. 4. 17. 17:03
  • 인프런 이진석 강사님의 장고 강의를 참고

CSRF

  • Cross Site Request Forgery
  • 사이트간 위조 공격으로 특정 웹브라우저가 유저의 웹브라우저를 신용하는 상태를 노린 것임
  • Form의 특성상 get요청을 받을 때 빈 Form을 보내주고 해당 빈 Form을 받은 사용자가 정보를 채워서 Post메서드로 다시 요청을 보내는 경우가 많은데, get요청과 post요청을보낸 유저가 일치하는지를 확인할 필요가 있음(CSRF 공격, 즉 위조해서 다른 사용자가 요청을 보낸 것일 수도 있음 ㅇㅇ)

 

CSRF Token

  • 장고는 공격을 받는 서버 입장에서 공격을 막기 위해 Token을 통한 체크를 함
  • Post요청에 한해, setting에서도 확인할 수 있는 CsrfViewMiddleware를 통한 Token체크를 진행하며, Token이 없거나 유효하지 않으면 바로 404에러 응답
  • 참고로 CSRF Token은 유저인증 Token이나 (JWT)Json Web Token이 아님. CSRF는 요청이 유효한지를 판단하는 것이고 유저인증Token&JWT는 유저를 인증하기 위한 Token임
  • 보통 post요청을 보내는 기능이 있는 form에서 많이 사용되며, {% csrf_token %} 이 한줄을 추가하는 것으로 csrf_token을 사용할 수 있다.
#HTML
<form action ="" method ="post" enctype='multipart/form-date'/>
    {% csrf_token %}
    <table>
    {{ form }}
    <table/>
    <input type="submit" value="저장"/>
</form>

실제 HTML FORM. hidden속성으로 csrf_token이 들어가 있다

 

CSRF Token 처리과정

  1. 사용자가 입력을 위한 빈 Form을 Get메서드로 요청
  2. 서버에서 CSRF Token도 같이 새로 할당하여 빈Form을 제공할 때 새로할당된 Token도 함께 넘겨줌
  3. 사용자가 빈폼에 내용을 입력하면서 Post메서드로 요청을 다시 보낼 때, 아까 할당받은 Token도 함께 넘겨준다
  4. csrfmiddleware에서 해당 token이 유효한지를 체크. 유효하면 승인하고(뷰 호출) 유효하지 않으면 404에러응답
  • 서버에서 할당해주는 Token은 매 요청시마다 달라짐!!

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

Generic editing views // Forms(6)  (0) 2022.04.18
Form validation : django form(5)  (0) 2022.04.17
ModelForm // django Form(3)  (0) 2022.04.17
HttpRequest와 HttpResponse // django form(2)  (0) 2022.04.17
HTML Form과 Django Form // django form(1)  (0) 2022.04.17

BELATED ARTICLES

more