什么是 CSRF
CSRF, Cross Site Request Forgery, 跨站點偽造請求。舉例來講,某個惡意的網站上有一個指向你的網站的鏈接,如果某個用戶已經登錄到你的網站上了,那么當這個用戶點擊這個惡意網站上的那個鏈接時,就會向你的網站發來一個請求,你的網站會以為這個請求是用戶自己發來的,其實呢,這個請求是那個惡意網站偽造的。
1.csrf原理
csrf要求發送post,put或delete請求的時候,是先以get方式發送請求,服務端響應時會分配一個隨機字符串給客戶端,客戶端第二次發送post,put或delete請求時攜帶上次分配的隨機字符串到服務端進行校驗
2.Django中的CSRF中間件
首先,我們知道Django中間件作用于整個項目。
在一個項目中,如果想對全局所有視圖函數或視圖類起作用時,就可以在中間件中實現,比如想實現用戶登錄判斷,基于用戶的權限管理(RBAC)等都可以在Django中間件中來進行操作
Django內置了很多中間件,其中之一就是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',]
上面第四個就是Django內置的CSRF中間件
3.Django中間件的執行流程
Django中間件中最多可以定義5個方法
process_request process_response process_view process_exception process_template_responseDjango中間件的執行順序
1.請求進入到Django后,會按中間件的注冊順序執行每個中間件中的process_request方法
如果所有的中間件的process_request方法都沒有定義return語句,則進入路由映射,進行url匹配
否則直接執行return語句,返回響應給客戶端
2.依次按順序執行中間件中的process_view方法
如果某個中間件的process_view方法沒有return語句,則根據第1步中匹配到的URL執行對應的視圖函數或視圖類
如果某個中間件的process_view方法中定義了return語句,則后面的視圖函數或視圖類不會執行,程序會直接返回
3.視圖函數或視圖類執行完成之后,會按照中間件的注冊順序逆序執行中間件中的process_response方法
如果中間件中定義了return語句,程序會正常執行,把視圖函數或視圖類的執行結果返回給客戶端
否則程序會拋出異常
4.程序在視圖函數或視圖類的正常執行過程中
新聞熱點
疑難解答