반응형
CSRF (Cross Site Request Forgery)
: 크로스 사이트 요청 위조, 사이트 간 요청 위조
웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여
특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미한다 (나무위키)
장고내에서 위 에러를 해결하기 위해
form 태그에서 적용하는 방법과 Ajax 사용시 적용하는 방법 2가지가 나와있다.
Usage
1. Form 태그에서 적용방법
- Form 태그 밑에 {% csrf_token %} 작성
<form method="post">
{% csrf_token %}
2. Ajax 사용시 적용방법
- 아래내용 적용 후 사용
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
이때 자주 사용하게 된다면 js 파일로 따로 뺀 후에 include 해서 사용하는것이 용이
- js/csrf_token.js 파일에는 위에 코드가 들어간다.
<script type="text/javascript" src="{% static 'js/csrf_token.js' %}"></script>
참고사이트
반응형