本博客已暫停更新,請轉自新博客 https://www.whbwiki.com/320.html 繼續閱讀
簡介
在django中我們需要在templates的form中加入{%csrf_token%}這串內容,它的作用是當我們get表單頁面時,服務器返回頁面的同時也會向前端返回一串隨機字符,post提交時服務器會驗證這串字符來確保用戶是在服務端返回的表單頁面中提交的數據,防止有人通過例如jquery腳本向某個url不斷提交數據,是一種數據提交的驗證機制。
用途
跨站點請求偽造(CSRF)保護
CSRF攻擊允許惡意用戶使用另一個用戶的憑據執行操作,而不需要該用戶的知情或同意。
Django內置了對大多數csrf攻擊的保護,只要您有啟用並使用在適當的情況下。然而,與任何緩解技術一樣,也有局限性。例如,可以在全局或特定視圖中禁用CSRF模塊。只有當你知道自己在做什么時,你才應該這樣做。
就是說為了防止你做的網站掛網后被不懷好意的人利用攻擊手段篡改了你的請求操作,讓服務器執行一些攻擊者想要執行的操作以達到某種目的而設立的安全機制。
使用
<form>
{%csrf_token%}
</form>
注意:必須在form表單內部
使用后無效果的解決方法
一般情況我們使用pycharm創建一個DJango項目時,在項目根目錄下的同名文件夾的setting.py文件里我們通常都能看到有一條設置
'django.middleware.csrf.CsrfViewMiddleware'
默認創建完django項目這條設置會默認啟用,為什么會啟用?(想快點解決問題的可以直接跳過該部分)
那么檢查完上述settings.py文件里的設置未被注釋,表單也設置了{% csrf_token %} 測試表單時還是報403錯誤
可以看看以下筆者自己學習過程中解決的方法:
- 檢查{% csrf_token %}放入位置是否正確
<form >
{% csrf_token %}
</form>
- 位置沒有錯誤就麻煩的方法,檢查自己的代碼有沒有錯誤。
- 確定自己已經檢查完了,還是報錯,那么如果並不是很重要,僅僅是學習用途,不存在商業用途的可以把setting.py里的csfr設置注釋掉:
- (這個解決方法是筆者使用到request.session,cookie時無奈之舉)換瀏覽器打開測試頁面。
這是筆者目前為止能解決的方法,因為百度到的有部分試過沒效果就沒寫出來,如果還是沒有解決你的問題,筆者表示遺憾,筆者新人,不喜勿噴。大家都是喜歡才聚集在此。