ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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)

    [django] Forbidden (CSRF token missing or incorrect.) 해결하기! by Codong's Development Diary (tistory.com)

     

     

Designed by Tistory.