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')