1、介绍:css
为了网站网站的安全,防止XSS等恶意数据性攻击。Django中提供了一个模块用以提供csrf认证。在使用以前咱们先介绍下在Django中csrf的认证原理。
csrf原理:在访问是会先发送一个GET的请求,将本身生成的验证字符串存放在客户端的cookie中,当客户端发送POST请求时,需携带该字符串进行认证。
html
二.认证方式:前端
1.客户端直接post请求认证:
ajax
在前端的form表单中直接添加 {% csrf_token %}即可经过认证django
<form action="/login/" method="POST"> {% csrf_token %} <input type="text" name="user" /> <input type="text" name="pwd" /> <input type="submit" value="提交" /> </form>
2.客户端用ajax方式提交认证:json
2.1:在ajax中添加X-CSRFToken的请求头,必须从cookie中取csrftoken的值(对单一ajax请求处理)安全
$.ajax({
type: "POST",
url:"/login/",
dataType: "json",
headers: {'X-CSRFtoken': $.cookie('csrftoken')},
data:{
"account_code":$('#account_login').find("input[name=account_code]").val(),
"pwd":$.sha256(pwd_const+$('#account_login').find("input[name=pwd]").val()),
},
error: function(request) {
alert("Connection error");
},
success: function(data) {
var success = data.status;
if (success) {
window.location="/login/home/";
} else {
$("#msg-info").html(data.message).css('color', 'red');
$('#msg-info').show();
}
}
});
2.2:使用$.ajaxSetup()给全局的ajax添加默认参数cookie
$.ajaxSetup({
beforeSend: function(xhr,settings){
xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'));
}
});
注意:使用ajax提交数据时,若是咱们前端没有csrf_roken的值会验证失败。此时咱们还须要在客户端添加一个装饰器ensure_csrf_cookie(),使服务端提早发送csrf_token用以验证post
from django.views.decorators.csrf import ensure_csrf_cookie @ensure_csrf_cookie def login(request): return render(request, 'login.html')