티스토리 뷰

Cross-site request forgery

사이트 간 요청 위조 공격

• 사용자가 의도하지 않게 게시판에 글을 작성하거나, 쇼핑을 하게 하는등의 공격

<!-- 공격자 사이트의 웹페이지에 접속하면, 그 즉시 site-victim.com에 새글쓰기 요청이 사용자 모르게 전달된다.. -->


A라는 싸이트 방문 시 아래와 같은 코드가 있다고 가정 한다.

<body onload="document.attack_form.submit();"> # java스크립트 코드

    <form name="attack_form" method="post" action="http://site-victim.com/blog/post/new/">

        <input type="hidden" name="title" value="스팸 제목" />

        <input type="hidden" name="content" value="스팸 내용" />

    </form>

</body> 

CSRF를 막기 위해 POST요청에 한해, csrf token 발급 및 체크


POST요청에 한해 CsrfViewMiddleware를 통해 csrf token을 체크 # middleware 란? view가 호출 되기 직전에 추가로 호출되는 함수 목록

(설명) ##토큰 값은 계속 바뀐다.

1. GET으로 유저에게 FORM형태를 제공한다.

2. 인자를 유저가 입력 하고, 마지막 단계에 Token을 발급 한다.

3. 전 항목을 전부 POST로 전송한다.

4. CSRF는 POST의 토큰을 비교한다.

5. 유효한 요청이면 요청을 처리한다. VIEW호출 .

(토큰 값이 맞지않으면 VIEW함수를 호출하지 않고 403 응답을 출력 한다.)

- 체크 오류 시에는 403 Forbidden 응답

GET요청에서는 csrf token이 불필요

<form action="" method="post">

    {% csrf_token %} <!-- csrf token 발급 : POST요청에서는 필수 !!! -->

    <input type="text" name="title" />

    <textarea name="content"></textarea>

    <input type="submit" />

</form> 

<input type='hidden' name='csrfviewmiddlewaretoken' value='123$45%6123'>과 비슷한 형태로 값으로 생성이 될거임 (임시의 값)


csrf_token != 유저인증 Token

대개 GET요청은 조회목적, POST요청은 추가/수정/삭제목적으로 사용


csrf_exempt 장식자  

특정 뷰에 한해 csrf token 체크를 해제할려면, csrf_exempt 장식자 적용 # API를 구현한 VIEW경우 CSRF 토큰을 사용하면 안된다.

기본 제공되는 보안기능이므로, 어쩔 수 없는 경우 (앱 API 기능을 제공 하는 경우) 를 제외하고는 제거하지 말자.  있어도 개발에 전혀 불편하지가 않다.


from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def my_view(request):

return HttpResponse('Hello world') 


JQuery, Javascript Post를 보낼때 구글 검색하여 매뉴얼 참고 하면 된다.

https://docs.djangoproject.com/en/2.0/ref/csrf/



"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""


반응형

'Python > * Django' 카테고리의 다른 글

18. Form  (0) 2017.12.19
17. HttpRequest and HttpResponse  (0) 2017.12.18
15. HTML Form  (0) 2017.12.15
14. Django 템플릿 엔진 - 템플릿 필터  (0) 2017.12.15
13. Django 템플릿 엔진 - 템플릿 태그  (0) 2017.12.15
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함