{% csrf_token %} 原理和做用 (踩坑必看)

簡介

在django中咱們須要在templates的form中加入{%csrf_token%}這串內容,它的做用是當咱們get表單頁面時,服務器返回頁面的同時也會向前端返回一串隨機字符,post提交時服務器會驗證這串字符來確保用戶是在服務端返回的表單頁面中提交的數據,防止有人經過例如jquery腳本向某個url不斷提交數據,是一種數據提交的驗證機制。前端

用途

跨站點請求僞造(CSRF)保護
CSRF攻擊容許惡意用戶使用另外一個用戶的憑據執行操做,而不須要該用戶的知情或贊成。
Django內置了對大多數csrf攻擊的保護,只要您有啓用並使用在適當的狀況下。然而,與任何緩解技術同樣,也有侷限性。例如,能夠在全局或特定視圖中禁用CSRF模塊。只有當你知道本身在作什麼時,你才應該這樣作。python

就是說爲了防止你作的網站掛網後被不懷好意的人利用攻擊手段篡改了你的請求操做,讓服務器執行一些攻擊者想要執行的操做以達到某種目的而設立的安全機制。jquery

使用

<form>
	{%csrf_token%}
</form>

注意:必須在form表單內部django

使用後無效果的解決方法

通常狀況咱們使用pycharm建立一個DJango項目時,在項目根目錄下的同名文件夾的setting.py文件裏咱們一般都能看到有一條設置瀏覽器

'django.middleware.csrf.CsrfViewMiddleware'

settings.py文件

csrf
默認建立完django項目這條設置會默認啓用,爲何會啓用?(想快點解決問題的能夠直接跳過該部分)安全

那麼檢查完上述settings.py文件裏的設置未被註釋,表單也設置了{% csrf_token %} 測試表單時仍是報403錯誤服務器

能夠看看如下筆者本身學習過程當中解決的方法:cookie

  1. 檢查{% csrf_token %}放入位置是否正確
<form >
	{% csrf_token %}
</form>
  1. 位置沒有錯誤就麻煩的方法,檢查本身的代碼有沒有錯誤。
  2. 肯定本身已經檢查完了,仍是報錯,那麼若是並非很重要,僅僅是學習用途,不存在商業用途的能夠把setting.py裏的csfr設置註釋掉:
    1
  3. (這個解決方法是筆者使用到request.session,cookie時無奈之舉)換瀏覽器打開測試頁面。

這是筆者目前爲止能解決的方法,由於百度到的有部分試過沒效果就沒寫出來,若是仍是沒有解決你的問題,筆者表示遺憾,筆者新人,不喜勿噴。你們都是喜歡才彙集在此。session

相關文章
相關標籤/搜索