簡體   English   中英

django 1.7 csrf_token無法正常工作:應該如何運作?

[英]django 1.7 csrf_token not working: how is it supposed to work?

第1頁:在模板中包含{%csrf_token%}的表單。

第2頁:謝謝頁面。

當我在頁面1上提交表單時,它使用HttpResponseRedirect重定向到頁面2 ...因此,如果用戶刷新頁面,它將無法重新提交...

但是我只是注意到,如果用戶從第2頁返回到第1頁...他可以再次按Submit按鈕重新提交相同的表單...所以...當我顯示第2頁時,有沒有一種方法可以使第1頁過期?

以防萬一,我的中間件類是:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

盡管從技術上講,您可以重新生成令牌,並且用戶嘗試重新提交時,用戶將看到“ 403 Forbidden響應”,但這並不是CSRF令牌的本意。 但是,CSRF令牌應該就是這樣-可以防止跨站點請求偽造的令牌。

如果用戶只能提交一次表單,則應在表單驗證中進行處理,並對照數據庫進行檢查。 否則,返回並重新提交表單通常被用戶視為顯式操作,並且與提交新表單的處理方式相同。

CSRF令牌旨在防止其他站點將內容發布到您的頁面上,從而防止創建垃圾郵件/垃圾郵件記錄。

它僅適用於POST請求。

為了防止某人編寫僅將垃圾數據提交到您的頁面的腳本,使用密鑰(攻擊者不會知道)生成唯一令牌。

在來自您網站的合法請求上,您的代碼會使用此密鑰生成令牌,並將其作為請求的一部分發送。

流氓請求將沒有此密鑰,並且您的代碼將引發適當的錯誤(從而防止發生任何操作)。

它並非旨在防止合法的重復請求。 有兩種主要方法可以防止這種情況:

  1. 確保您始終在POST之后重定向(這是為了防止某人點擊刷新,然后再次發送相同的請求;盡管這樣做時幾乎所有現代瀏覽器都會發出警告)。

  2. 在服務器端進行控制以防止可疑的重復條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM