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

首頁 > 編程 > Python > 正文

詳解Django的CSRF認(rèn)證實(shí)現(xiàn)

2020-02-15 23:07:40
字體:
供稿:網(wǎng)友

什么是 CSRF

CSRF, Cross Site Request Forgery, 跨站點(diǎn)偽造請(qǐng)求。舉例來講,某個(gè)惡意的網(wǎng)站上有一個(gè)指向你的網(wǎng)站的鏈接,如果某個(gè)用戶已經(jīng)登錄到你的網(wǎng)站上了,那么當(dāng)這個(gè)用戶點(diǎn)擊這個(gè)惡意網(wǎng)站上的那個(gè)鏈接時(shí),就會(huì)向你的網(wǎng)站發(fā)來一個(gè)請(qǐng)求,你的網(wǎng)站會(huì)以為這個(gè)請(qǐng)求是用戶自己發(fā)來的,其實(shí)呢,這個(gè)請(qǐng)求是那個(gè)惡意網(wǎng)站偽造的。

1.csrf原理

csrf要求發(fā)送post,put或delete請(qǐng)求的時(shí)候,是先以get方式發(fā)送請(qǐng)求,服務(wù)端響應(yīng)時(shí)會(huì)分配一個(gè)隨機(jī)字符串給客戶端,客戶端第二次發(fā)送post,put或delete請(qǐng)求時(shí)攜帶上次分配的隨機(jī)字符串到服務(wù)端進(jìn)行校驗(yàn)

2.Django中的CSRF中間件

首先,我們知道Django中間件作用于整個(gè)項(xiàng)目。

在一個(gè)項(xiàng)目中,如果想對(duì)全局所有視圖函數(shù)或視圖類起作用時(shí),就可以在中間件中實(shí)現(xiàn),比如想實(shí)現(xiàn)用戶登錄判斷,基于用戶的權(quán)限管理(RBAC)等都可以在Django中間件中來進(jìn)行操作

Django內(nèi)置了很多中間件,其中之一就是CSRF中間件

MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]

上面第四個(gè)就是Django內(nèi)置的CSRF中間件

3.Django中間件的執(zhí)行流程

Django中間件中最多可以定義5個(gè)方法

process_request process_response process_view process_exception process_template_response

Django中間件的執(zhí)行順序

1.請(qǐng)求進(jìn)入到Django后,會(huì)按中間件的注冊(cè)順序執(zhí)行每個(gè)中間件中的process_request方法
    如果所有的中間件的process_request方法都沒有定義return語句,則進(jìn)入路由映射,進(jìn)行url匹配
    否則直接執(zhí)行return語句,返回響應(yīng)給客戶端

2.依次按順序執(zhí)行中間件中的process_view方法
    如果某個(gè)中間件的process_view方法沒有return語句,則根據(jù)第1步中匹配到的URL執(zhí)行對(duì)應(yīng)的視圖函數(shù)或視圖類
    如果某個(gè)中間件的process_view方法中定義了return語句,則后面的視圖函數(shù)或視圖類不會(huì)執(zhí)行,程序會(huì)直接返回

3.視圖函數(shù)或視圖類執(zhí)行完成之后,會(huì)按照中間件的注冊(cè)順序逆序執(zhí)行中間件中的process_response方法
    如果中間件中定義了return語句,程序會(huì)正常執(zhí)行,把視圖函數(shù)或視圖類的執(zhí)行結(jié)果返回給客戶端
    否則程序會(huì)拋出異常

4.程序在視圖函數(shù)或視圖類的正常執(zhí)行過程中

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南江县| 光泽县| 台东市| 海口市| 铜梁县| 天津市| 汾西县| 新巴尔虎左旗| 中江县| 长岭县| 佛冈县| 连江县| 宁蒗| 临沧市| 洛扎县| 韶关市| 乌审旗| 万载县| 九台市| 玉环县| 屯门区| 顺平县| 吴川市| 乌鲁木齐市| 元江| 河南省| 随州市| 黎平县| 花莲县| 玛纳斯县| 白水县| 桂东县| 山阴县| 陵水| 米脂县| 冕宁县| 大同县| 开阳县| 望城县| 开化县| 玉门市|