国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Django進(jìn)階之CSRF的解決

2020-02-15 22:38:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

簡(jiǎn)介

django為用戶實(shí)現(xiàn)防止跨站請(qǐng)求偽造的功能,通過(guò)中間件 django.middleware.csrf.CsrfViewMiddleware 來(lái)完成。而對(duì)于django中設(shè)置防跨站請(qǐng)求偽造功能有分為全局和局部。

全局:

中間件 django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect,為當(dāng)前函數(shù)強(qiáng)制設(shè)置防跨站請(qǐng)求偽造功能,即便settings中沒(méi)有設(shè)置全局中間件。

@csrf_exempt,取消當(dāng)前函數(shù)防跨站請(qǐng)求偽造功能,即便settings中設(shè)置了全局中間件。

注意:from django.views.decorators.csrf import csrf_exempt,csrf_protect

原理

當(dāng)用post提交數(shù)據(jù)的時(shí)候,django會(huì)去檢查是否有一個(gè)csrf的隨機(jī)字符串,如果沒(méi)有就會(huì)報(bào)錯(cuò),這也是之前我們一直將其注釋的原因,錯(cuò)誤如下:

在django內(nèi)部支持生成這個(gè)隨機(jī)字符串

通過(guò)form提交

在form表單里面需要添加{%csrf_token%}

這樣當(dāng)你查看頁(yè)面源碼的時(shí)候,可以看到form中有一個(gè)input是隱藏的

總結(jié)原理:當(dāng)用戶訪問(wèn)login頁(yè)面的時(shí)候,會(huì)生成一個(gè)csrf的隨機(jī)字符串,,并且cookie中也存放了這個(gè)隨機(jī)字符串,當(dāng)用戶再次提交數(shù)據(jù)的時(shí)候會(huì)帶著這個(gè)隨機(jī)字符串提交,如果沒(méi)有這個(gè)隨機(jī)字符串則無(wú)法提交成功

cookie中存放的csrftoken如下圖

通過(guò)ajax提交

因?yàn)閏ookie中同樣存在csrftoken,所以可以在js中通過(guò):

$.cooke("cstftoken")獲取

如果通過(guò)ajax進(jìn)行提交數(shù)據(jù),這里提交的csrftoken是通過(guò)請(qǐng)求頭中存放,需要提交一個(gè)字典類型的數(shù)據(jù),即這個(gè)時(shí)候需要一個(gè)key。

在views中的login函數(shù)中:from django.conf import settings,然后打印print(settings.CSRF_HEADER_NAME)

這里需要注意一個(gè)問(wèn)題,這里導(dǎo)入的settings并不是我們?cè)陧?xiàng)目文件下看到的settings.py文件,這里是是一個(gè)全局的settings配置,而當(dāng)我們?cè)陧?xiàng)目目錄下的settings.py中配置的時(shí)候,我們添加的配置則會(huì)覆蓋全局settings中的配置

print(settings.CSRF_HEADER_NAME)打印的內(nèi)容為:HTTP_X_CSRFTOKEN

這里的HTTP_X_CSRFTOKEN是django在X_CSRF的前面添加了HTTP_,所以實(shí)際傳遞的是就是X_CSRFtoken,而在前端頁(yè)面的ajax傳遞的時(shí)候由于不能使用下劃線所以傳遞的是X_CSRFtoken

下面是在前端ajax中寫(xiě)的具體內(nèi)容:

$("#btn1").click(function () {    $.ajax({      url:"/login/",      type:"POST",      data:{"usr":"root","pwd":"123"},      headers:{ "X-CSRFtoken":$.cookie("csrftoken")},      success:function (arg) {      }    })  })            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁波市| 横峰县| 平定县| 常宁市| 吉水县| 兴山县| 武乡县| 江安县| 新化县| 乐山市| 当阳市| 贵溪市| 金溪县| 常州市| 揭阳市| 日喀则市| 阿尔山市| 盘山县| 库尔勒市| 三原县| 普定县| 乐陵市| 甘南县| 宝坻区| 合水县| 常山县| 富民县| 金寨县| 万年县| 濮阳县| 安岳县| 德江县| 龙口市| 青浦区| 叶城县| 金乡县| 蕉岭县| 云林县| 鄢陵县| 镇巴县| 班玛县|