国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 邵东县| 阜新市| 观塘区| 诏安县| 内丘县| 壶关县| 岑巩县| 乐业县| 灵武市| 昌乐县| 河北区| 东至县| 紫阳县| 南靖县| 新泰市| 张家口市| 电白县| 祁东县| 桂东县| 遂昌县| 丰县| 阿勒泰市| 进贤县| 宾川县| 黄石市| 贵港市| 安图县| 潼南县| 凌海市| 博湖县| 阜宁县| 安龙县| 保定市| 临城县| 抚远县| 永年县| 鹿泉市| 阿坝县| 綦江县| 隆化县| 岱山县|