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)

 

 

설정

트랙백

댓글

무료 SSL 인증 사이트. Let's Encrypt

Web 2022. 11. 23. 19:40

이번에 http 서버를 개발하면서

https를 적용시킬 차례이다.

 

SSL 인증은 예전에 리눅스에서 만질때 좀 만져보고

간만에 보게 됐는데, 그때 기억으로 손 쉽게 했으니

별거 없다고 생각했지만.............

 

한국전자인증? 에서 인증서를 받아야 한다.

유료.

그리고 인증서 종류도 여러개 있던데 골치 아프다

 

자료를 찾아보니

책임 소재가 생길만한 정보를 다룰 때나 쓰지

굳이 유료 SSL을 사용하지 않아도 괜찮다고는 한다.

회사에서 쓰는거면 그냥 사서 쓰는 것도 추천하는 글도 있었다.

 

아무튼 무료 SSL 사이트를 찾아보니

Let's Encrypt 라는 곳이 있다

세계적!! 규모의 TLS 공인 인증서라고 한다.

 - Let's Encrypt (letsencrypt.org)

 - Let's Encrypt - 나무위키 (namu.wiki)

 

 

 

그런데 한국전자인증에 돈 주고 한 건 안비밀ㅋㅋㅋㅋㅋㅋ

'Web' 카테고리의 다른 글

Django CSRF token 에러  (0) 2023.01.05
nginX + waitress + django(python) 웹서비스 구축(Windows)  (2) 2022.10.08

설정

트랙백

댓글

nginX + waitress + django(python) 웹서비스 구축(Windows)

Web 2022. 10. 8. 11:14

python으로 짠 웹서비스를 구축하려고 한다.

Linux 환경에서 하는게 맞지만 편의상 윈도우에서 구축해 보려고 한다.

윈도우 환경 추천은 안한다;;

linux에서 자료는 많지만 윈도우는 잘 없었다... 없는 이유가... 추천 안한다ㅋㅋ

 

자료를 찾아보신 분들은 아실거지만 django로 바로 웹서비스를 구축하지 말라고

django 팀에서도 정식으로 말하고 있다. 자세한 것은 아래 정리를 너무 잘해주신 분꺼 링크가 있다.

https://uiandwe.tistory.com/1268

 

wsgi 종류 중에 윈도우에서 설치가 안되거나 까다로운게 많아서

손쉽게 할 수 있는 것을 찾아보니 waitress였다.

 

아래 내용은 nginX, waitress, django 설치 및 셋팅, 테스트 실행 까지이다.

 

 

--- nginX 설치

http://nginx.org/en/download.html

난 아직 잘 몰라서 Stable version을 받았다.

원하는 폴더에 압축을 풀고 실행 파일을 실행하면

아무 반응이 없을 것이다ㅋㅋ

웹을 키고 http://127.0.0.1 or http://localhost 를 치고 들어가 보자

아래 같이 뜨면 다음으로 ㄱㄱ

 

 

--- django, waitress 설치

다른 것과 환경이 엉키는 것을 방지해서 가상 환경을 구성하여 설치한다.

'cmd'를 켜고 작업 위치에 간다.

test 폴더에 가상 환경을 구축하고 실행했다.

> python -m venv test (가상환경 구성 명령어)
> cd test (test 폴더로 이동)
> cd Scripts (Scripts 폴더로 이동)
> .\activate (가상환경 실행)

 

여기까지 하면 아래와 같이 바뀐다.

 

이제 django, waitress 를 설치는 아주 쉽다.

에러만 안나면....

에러는.... 다른 곳을 참고하시길ㅜㅜ;

> pip install django

> pip install waitress

 

 

--- 셋팅

이제 셋팅을 하자. 이것도 아주 쉽다. 아래와 같이 진행할 것이다.

    1. django 프로젝트 생성 및 실행

    2. nginX 셋팅 후, 실행

 

1. django 프로젝트 생성

> mkdir Projects (Projects 폴더 생성)
> cd Projects (Projects 폴더로 이동)
> django-admin startproject firstSite (firstSite 라는 장로 프로젝트 생성)

 

한번 테스트를 django로 실행해 보면 아래와 같이 뜬다.

http://127.0.0.1:8000/ or http://localhost:8000/ 둘 중에 접속되면 굿

다음 실행을 위해 cmd창에 'Ctrl + C'를 눌러서 프로그램을 종료한다

 

 

이제 nginX와 연결해 줄 waitress로 실행.

waitress-serve --listen=*:8000 firstSite.wsgi:application (waitress로 실행)

--listen=(ip):(port) 이다.

--listen=*:8000 이면 모든 ip로 8000번 포트를 연다는 뜻이다.

 

firstSite.wsgi:application 은 firstSite 모듈? 안에 wsgi 안에 application을 실행인 것 같다.

dir로 폴더 리스트와 현재 위치가 보이듯 manage.py와 firstSite 폴더가 보이는 곳에서 실행해야 한다.

 

그리고 다시 http://127.0.0.1:8000/ or http://localhost:8000/ 둘 중에 접속되면 끝

 

 

2. nginX 셋팅 후, 실행

nginX 압축 푼 곳에 가서 conf 폴더에 들어가면

nginX.conf라는 파일이 있다.

메모장 같은 것으로 열고 아래와 같이 타이핑 해준다.

location / {
            proxy_pass  http://localhost:8000;
        }

 

위에 내용을 넣기 전에 반드시 빨강 박스 처럼 #를 붙여 주석 처리를 해준다.

그리고 다시 nginX를 실행시켜주면 끝ㅋ

혹시 전에 nginX를 종료한 적이 없으면

작업관리자 or cmd 창에서 해당 위치에서 'nginX -s stop' 명령을 줘서 종료 후 실행하길 바란다.

 

http://localhost or http://127.0.0.1로 접속해서 아래와 같이 뜨면 끝ㅋ

 

이제 python으로 마음껏 개발해 봅시다ㅋㅋㅋ

'Web' 카테고리의 다른 글

Django CSRF token 에러  (0) 2023.01.05
무료 SSL 인증 사이트. Let's Encrypt  (0) 2022.11.23

설정

트랙백

댓글