CSRF的原理和基本使用
什么是CSRF:CSRF是为了防止跨站请求伪造,当用户第一次发请GET请求时后台会给前端发送一个加密字符串,下次用户发请POST请求时就需要带这这个加密字符串发送
CSRF的使用:在setting.py中间件中的django.middleware.csrf.CsrfViewMiddleware来完成这个功能biand
form表单发起请求在请求:在表单里面加上{% csrf_token %}就行
ajax的使用:对于某个请求设置,在请求头中加入headers: {'X-CSRFtoken': $.cookie('csrftoken')},
$('#btn1').click(function () {
$.ajax({
url: '/login/',
type:"GET",
data: {'user': 'root', 'pwd': '123'},
headers: {'X-CSRFtoken': $.cookie('csrftoken')},
success:function(arg){
}
})
});
对所有的ajax的post请求进行设置
function csrfSafeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); //对GET|HEAD|OPTIONS|TRACE不进行设置
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
对某个进行设置或者不设置
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt 这个装饰器是用来取消当前函数的csrf功能
@csrf_protect 这个使用来强制键当前的函数设置此功能