CSRF Fobbiden
CSRF란?
Cross-site Request Forgery의 약자로 해석하면 사이트간 요청위조를 의미한다. 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트를 요청하게 하는 공격을 의미한다.
공격자가 사이트의 URL 패턴을 해석해 비밀번호 변경이나 개인정보 접근 권한을 주는 URL을 특정 사용자에게 보내고 클릭했을 때 공격자가 원하는 행위를 웹사이트에 요청하게 된다.
이를 막기 위해 Django에서는 1.2 버전부터 모든 POST방식의 폼 전송시 hidden 필드로 세션에 따른 임의의 키를 제공하고 요청의 키값이 매번 유효한지 사용한다. 대표적으로 사용되는 방식은 아래와 같이 {% csrf_token %} 를 POST가 사용된 폼 템플릿에 삽입해야한다.
<form action = p" accept-charset="utf-8" name = "person_info" method = "get"> {% csrf_token %}
<!--form content-->
</form>
form 태그 뿐만 아니라 ajax를 이용한 POST방식 요청시 다음과 같이 data에 'csrfmiddlewaretoken' 에 csrf_token을 넣어준다.
jQuery.ajax(
{
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': {
'content': 'xxx',
'csrfmiddlewaretoken': '{{ csrf_token }}', <!--토큰을 직접 넣어준다 -->
},
'dataType': 'json',
'success': rateReviewResult
}
);
https://stackoverflow.com/questions/6506897/csrf-token-missing-or-incorrect-while-post-parameter-via-ajax-in-django
https://insilicogen.com/blog/55
'Web Programming > Django' 카테고리의 다른 글
[pipenv] Your dependencies could not be resolved. (0) | 2020.11.27 |
---|---|
[Django] 장고 쿼리셋 파헤치기(Eager Loading) (0) | 2020.11.27 |
ImproperlyConfigured Error (0) | 2020.11.16 |
Django - 관리자 페이지에서 엑셀 출력 방법 (0) | 2020.10.12 |
Django - 사용자별 관리자 페이지 접근권한 수정 (0) | 2020.10.11 |