Django form 防止csrf 的3種解決方法

解決方法1:

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

MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]

註釋掉此段代碼,便可。django

缺點:致使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:

django的 csrf 安全工做順序是:先從後臺獲取csrf_token 併發送給前端,而後前端在進行form表單提交時,把帶有名爲 csrfmiddlewaretoken,值爲 csrf_token 的字段一塊兒發送給後端進行校驗。函數

因此此解決方案即是按照此邏輯,先經過一個接口獲取 csrf_token,而後在form表單中一塊兒提交給後端校驗 在views.pypost

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 ,這樣校驗便成功spa

優勢:完成了 csrf 安全校驗code

相關文章
相關標籤/搜索