2011-08-05 26 views
3

我有一個運行在HTTP和HTTPS後面的博客,並且遇到了有關csrf標記驗證的問題。用於HTTP和HTTPS的Django CSRF

CSRF令牌在每種形式中都是可用的,但是當我使用HTTP版本的網站並嘗試提交註釋時,出現以下錯誤。

禁止(403) CSRF驗證失敗。請求中止。

引薦者檢查失敗 - http://mysite.com/blog/1/不符合https://mysite.com/

當通過HTTPS查看博客時,它工作正常。

任何人都知道如何獲得驗證以匹配兩者?

回答

1

我想通了。這是我的fastcgi參數的問題

fastcgi_param HTTPS on;

設置要求HTTPS打開的環境變量。當這個變量打開時,Django爲csrf標記執行一些額外的強制執行。

+0

在哪個Web服務器上運行您的網站?我有同樣的問題,在lighttpd下運行,目前無法解決它。 –

+0

你是怎麼修復它的?你刪除了fastcgi_param嗎?沒有它,request.is_secure()不能正常工作... – Soid

1

你可能要檢查你的設置,看看如果你設置了CSRF_COOKIE_SECURE參數設置爲True

這標誌着該cookie的安全,並防止瀏覽器接受它通過非安全連接,也就是HTTP。

要檢查是否是問題的根源,您可以使用任何工作視圖並放入斷言False以獲取調試屏幕,並查看Csrf cookie是發送還是發送。

+0

感謝您的幫助!我當然認爲是這樣,但實際上它與我在上面發佈的fastcgi參數設置的環境變量有關。 – Dave