-
Django CSRF token 에러Web 2023. 1. 5. 10:59
후후.... 보안 관련 에러인데 찾아보니 내용이 너무 많다.
상당히 복잡하다....
CSRF란 #$%&, 원인이 #$%^#, 대안 방법이 블라블라.... 너무 복잡했다.
다른 건 별로 안 궁금하고 내가 원하는 것은 저 에러가 없어지는 것이다.
크게 방법은 두가지를 추천했다.
- 예외처리
- html 헤더에 csrf 코드 넣기
예외처리는 좀 위험해 보여서 html 헤더에 넣는 방법으로 처리하기로 했다.
------------------------------------------------------
html 헤더에 csrf 코드 넣기 방법 2가지!
------------------------------------------------------
- html 에 넣기 -
- javascript 에 넣기 -
결국 둘 다 form 안에 csrf 코드를 넣어주는 원리는 같고 아래와 같이 한다.
1. html 에 넣기
form 안에 {% csrf_token %} 를 넣어주면 됨
2. javascript 에 넣기
소스)var form = document.createElement('form');form.setAttribute('method', 'post');form.setAttribute('action', '/data/');document.charset = "UTF-8";
var hiddenField = document.createElement('input');hiddenField.setAttribute('type', 'hidden');hiddenField.setAttribute('name', 'csrfmiddlewaretoken');hiddenField.setAttribute('value', '{{csrf_token}}');form.appendChild(hiddenField);document.body.appendChild(form);form.submit();빨강 박스 처럼 넣어주면 끝ㅋ
아래 참고 글들에서 Django 공식문서를 확인하여
javascript로 csrf를 생성해주는 코드를 만들어서
헤더에 붙여준다고 하는데...
좀 복잡해 보여서 우연히 1번에 html로 붙이는 코드는
사용자에게서 어떻게 보일까 궁금해서 코드를 보았는데
이렇게 input 박스가 생성된 것을 보고 2번과 같이 생성해 주니 잘 됐다ㅋㅋㅋ
코딩 잼네ㅋㅋㅋ
혹시 저 코드가 실행이 안된다면 셋팅이 덜 되어서 그럴 수도 있다.
최신 버전에는 기본으로 셋팅이 되어 있어서 생략했는데 (내 환경도 기본으로 셋팅되어 있었다)
아래 참고 사이트에서 기본 셋팅을 확인하고 가도 괜찮을 것 같다.
참고
Forbidden (CSRF token mis.. : 네이버블로그 (naver.com)
히즈웨드 장고(Django) 개발: 폼(Form) 관리와 CSRF 취약점 해결 (tistory.com)
'Web' 카테고리의 다른 글
무료 SSL 인증 사이트. Let's Encrypt (0) 2022.11.23 nginX + waitress + django(python) 웹서비스 구축(Windows) (2) 2022.10.08