CSRF(Cross Site Request Forgery, 跨站域請求偽造)是一種網(wǎng)絡(luò)的×××方式。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),君山企業(yè)網(wǎng)站建設(shè),君山品牌網(wǎng)站建設(shè),網(wǎng)站定制,君山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,君山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
我的理解是,比如你訪問過招商銀行的網(wǎng)站并登陸之后,你的cookie信息暫時不會失效,
這時,hacker通過各種方式誘導你訪問他給你提供的網(wǎng)站等鏈接,讓你在同一瀏覽器訪問
hacker給你的網(wǎng)站時,那么他給你提供的網(wǎng)站里面有直接有向招商銀行提交轉(zhuǎn)賬信息的請求,這時,
這個轉(zhuǎn)賬請求會借用你剛剛登陸過招商銀行的cookie信息,來使用的你的身份進行合法的轉(zhuǎn)賬。
那么為了減少這個情況的發(fā)生,在客戶端與服務(wù)端交互的時候,當客戶端瀏覽器第一次訪問cookie的時候,服務(wù)端會有基于csrf的隨機驗證字符串生成,然后把這些字符串寫到客戶端cookie里,同時服務(wù)端在session里保存一份,當客戶端瀏覽器再次發(fā)來post請求的時候,服務(wù)端會驗證cookie里csrf_token(就是生成的這個隨機字符串)。
Django里自動幫我們封裝了這個功能,在Django項目里的setting.py文件里會默認開啟'django.middleware.csrf.CsrfViewMiddleware',這一項功能。
所以我們html文件里有post請求的時候要在from表單里添加{% csrf_token %}這一項
Title
但是有的時候是不需要 csrf_token 認證的,有的時候是需要的,但是Django項目里的setting.py文件里設(shè)置了'django.middleware.csrf.CsrfViewMiddleware'之后就是全局生效了;這就 不是我們所需要的了。
那么如果有的函數(shù)不需要csrf_token 認證的話,那么就需要用到@csrf_exempt裝飾器來設(shè)置單個函數(shù)不用csrf_token 認證
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt是不需要設(shè)置csrf_token認證的
@csrf_protect是 需要設(shè)置csrf_token 認證的