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>
CSRF Token 처리과정
- 사용자가 입력을 위한 빈 Form을 Get메서드로 요청
- 서버에서 CSRF Token도 같이 새로 할당하여 빈Form을 제공할 때 새로할당된 Token도 함께 넘겨줌
- 사용자가 빈폼에 내용을 입력하면서 Post메서드로 요청을 다시 보낼 때, 아까 할당받은 Token도 함께 넘겨준다
- 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 |