공격방법 중에 CSRF 관련된 것이 있는 모양인데(어떻게 하는지는 잘 모르겠고),
Django에선 이런 걸 막는데 필요한 정보가 넘어 오지 않으면 처리 중에 에러를 발생시킨다.
그러니까, 반드시 아래의 절차를 따라서 submit할 때 csrf token를 서버로 보내 줘야 한다.
POST방식으로 데이터를 전송하려면, 입력하는 화면에서 아래와 같은 코드가 추가되어야 한다.
1. view에서 request에 대해 csrf 정보 추가
from django.core.context_processors import csrf
def show_userinfo3(request):
c = {}
c.update(csrf(request))
return render_to_response('user/input.html',c)
위와 같이 귀찮게 매번 코드에 추가하지 않으려면,
settings.py의 TEMPLATE_CONTEXT_PROCESSORS에 django.core.context_processors.csrf 가 포함되어 있으면 아래와 같이만 써도 자동으로 csrf 태그가 정보가 추가됨
def show_userinfo3(request):
return render_to_response('user/input.html', RequestContext(request))
2. form 태그 안에 {% csrf_token %} 추가
<form action="/pasta/user/userinfo4/" method="post"> {% csrf_token %}
이렇게 해서 웹브라우저에서 user/input.html 화면의 소스보기를 보면, {% csrf_token %} 부분에 아래와 같은 코드가 생성됨
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='c497670310117cb5fbcdc6bc0657d455' /></div>
이런 csrf 정보가 없으면, submit했을 때 서버에서 처리하다가 CSRF token missing or incorrect 에러가 발생함.
'Python_Django' 카테고리의 다른 글
Django의 cache 사용 (0) | 2012.07.25 |
---|---|
decorator 만들기 (0) | 2012.07.25 |
hash(digest) 호출 (0) | 2012.07.25 |
request의 값 처리 (0) | 2012.07.25 |
Django의 session 처리 (0) | 2012.07.13 |