我的站點上的CSRF Django中間件(SVN中繼版本)出現了很多故障。我得到的唯一錯誤是:CSRF故障:reason = CSRF令牌丟失或不正確。有很多故障的Django CSRF框架
我該如何診斷這些CSRF錯誤來自哪裏?我自己不能導致CSRF錯誤,但是當CSRF錯誤視圖被觸發時,我設置該網站給我發電子郵件,所以我知道它經常發生。
我的站點上的CSRF Django中間件(SVN中繼版本)出現了很多故障。我得到的唯一錯誤是:CSRF故障:reason = CSRF令牌丟失或不正確。有很多故障的Django CSRF框架
我該如何診斷這些CSRF錯誤來自哪裏?我自己不能導致CSRF錯誤,但是當CSRF錯誤視圖被觸發時,我設置該網站給我發電子郵件,所以我知道它經常發生。
我真的很努力,但最終做到了。這裏是我的主要問題(Django 1.2 beta):
確保您的設置電子郵件都是正確的。我不得不做這樣的事情:
EMAIL_HOST = 'mail.my-domain.com' EMAIL_HOST_USER = EMAIL_HOST_PASSWORD = 'passwd文件' EMAIL_PORT '在服務器上我的用戶名'= '26' #似乎經常在論壇的很多帖子上,我都是25或26,我讀 DEFAULT_FROM_EMAIL='[email protected]'#在託管域名上,確保它已設置併發送 SERVER_EMAIL ='[email protected]'#與上述相同的電子郵件
return render_to_response('contact.htm',{'favicon':r'____。ico', 'more_stuff':「......」 'more_stuff':「......」 'more_stuff': 「......」 }, context_instance = RequestContext的(要求))
請確保您有:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.csrf",
.....
)
在你的settings.py
文件。
請注意,這真的不是一個如何,這正是我所做的工作。現在發佈它的原因是,我在討論這個主題的論壇上看到很多人訴諸關閉csrf_token。
當中間件成功停止跨站點請求僞造攻擊時,應發生CSRF錯誤。可能是驗證這種情況的最好方法是檢查您的Web服務器日誌,並且您應該看到與先前請求無關的請求。
我似乎在所有發佈帖子並沒有特殊密鑰的公共頁面上獲得CSRF錯誤。我的解決方法是在所有公共視圖上使用disable_csrf裝飾器。 – MikeN 2009-12-20 15:40:01
請確保GET請求您的視圖功能是這樣的:
def login_view():
c = {}
c.update(csrf(request))
request.session.set_expiry(0)
if request.method == 'GET':
return render_to_response('newform.html',<b>c</b>)
然後檢查查看源文件爲您newform.html,它必須有隱藏字段。
<`form action="" method="post" name="loginform"> <`div style='display:none'`><`input type='hidden' name='csrfmiddlewaretoken' value='6f4dee99ab2f5e7201e057cb63' />
在這裏,動作可以引用相同的頁面,action=""
。
另外,您應該檢查settings.py
文件中MIDDLEWARE_CLASSES
的順序。應該看起來像這樣:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
)
LocaleMiddleware
最後。 對我來說,解決方案是RequestContext
實例和排序。
我在這裏試過一切,沒有運氣。據我所知,我正在做這本書的一切。 (Django 1.3)。任何人有任何其他想法?暫時關閉CSFR。 – araneae 2011-10-20 02:07:16
我有類似的問題,並有許多形式的空行動網址。出於興趣,這是什麼原因導致問題?我可以看到這裏:http://stackoverflow.com/questions/1131781/is-it-a-good-practice-to-use-an-empty-url-for-a-html-forms-action-attribute-a它不在規範中,但我想知道它爲什麼會導致問題? – bjw 2012-08-17 10:43:34
另外,@araneae沒有很好的理由關閉crsf保護是一個壞主意,這個評論可能會導致其他人也這樣做。唯一可以看到有必要關閉的情況是針對某些ajax場景,也可能是從Twilio等第三方API獲取POST數據。 – bjw 2012-08-17 11:18:39