Django的POST請求時因為開啟防止csrf,報403錯誤,及四種解決方法


Django默認開啟防止csrf(跨站點請求偽造)攻擊,在post請求時,沒有上傳 csrf字段,導致校驗失敗,報403錯誤

解決方法1:

注釋掉此段代碼,即可。

缺點:導致Django項目完全無法防止csrf攻擊

解決方法2:

在 views.py文件中

#導入,可以使此次請求忽略csrf校驗
from django.views.decorators.csrf import csrf_exempt

#在處理函數加此裝飾器即可
@csrf_exempt def post(request): name=request.post['name'] return HttpResponse('welcome!{}'.format(name))

缺點:導致此次請求無法防止csrf攻擊,但是比第一種好很多

解決方法3:

針對使用模版進行開發的MTV模式,在模版文件提交form表單代碼中添加 

但是本人不使用MTV模式進行開發,只使用 Restful模式,所以對於Restfu模式開發的,使用第四種解決方法。

 

解決方法4:

django的csrf安全工作順序是:先從后台獲取csrf_token 並發送給前端,然后前端在進行form表單提交時,把帶有名為csrfmiddlewaretoken,值為 csrf_token  的字段一起發送給后端進行校驗。

所以此解決方案便是按照此邏輯,先通過一個接口獲取 csrf_token,然后在form表單中一起提交給后端校驗

from django.template.context_processors import csrf

def get_csrf(request): #生成 csrf 數據,發送給前端 x = csrf(request) csrf_token = x['csrf_token'] return HttpResponse('{} ; {}'.format(str(re), csrf_token))

然后在另一個POST請求中 加參數  名為:csrfmiddlewaretoken  值為 get_csrf函數返回的csrf_token  ,這樣校驗便成功

優點:完成了 csrf 安全校驗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM