2012-08-05 8 views
5

Dış dünyaya yeni maruz kalmaya başlayan küçük bir sitemiz var. Çoğunlukla çok iyi çalışıyor ancak bazen formlardan birinden "CSRF FAILURECSRF çerezi ayarlanmadı" mesajı ile 403 hata alıyoruz. Form kesinlikle dahil {% csrf_token %} vardır ve bizim katman şuna benzer:Sporadik 403 "CSRF FAILURECSRF çerezi ayarlanmadı" hataları django ile

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

formu çoğu insan için iyi çalışır, ancak yaklaşık günde bir kez bir başarısızlık durumunda olan bir e-posta almak. E-posta şöyle gerçek istekle içerir (ı özel verileri saklamak için POST verilerin geri kalanını kaldırdık, ancak csrfmiddlewaretoken sol):

<WSGIRequest 
path:/main/10/apply/, 
GET:<QueryDict: {}>, 
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>, 
COOKIES:{}, 
META:{'CONTENT_LENGTH': '111978', 
'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew', 
'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk', 

CSRF_COOKIE csrfmiddlewaretoken eşleşmiyor Bu, benim varsaydığım şey, soruna neden oluyor, ancak bunların bazı gönderimler için nasıl senkronize edilip edilmediğini anlayamıyorum, ancak diğerleri değil. Sayfa sadece birkaç alanla oldukça basit bir formdur.

Bakmam gereken yerler için herhangi bir öneriniz var mı? Apache ile mod_wsgi kullanarak en son Django 1.4.1'i CentOS'ta çalıştırıyorum.

Düzenleme: başarılı isteklere göre tuhaf olan tek şey burada COOKIES:{} bölüm neden yaptığını daha sonra belki de onlar sadece kendi tarayıcısında engelli çerezleri şüphelenmek için bana yol ama hangi boş olmasıdır META bölümünde CSRF_COOKIE ile ortaya çıkıyor mu?

Yardımlarınız için teşekkürler!

Brandon

+0

Bu aynı sorunla karşılaşıyorum. Hiç bir çözüm buldunuz mu? –

+0

Sıralaması. Sorun, bazı kullanıcıların çerezleri kapatmasıydı ve bunu sunucu tarafında düzeltmenin bir yolu yoktu. Kamuya açık form için CSRF korumasını kapattık. Giriş sayfaları veya diğer hassas veriler için bunu yapma, ancak CSRF koruması her zaman kesinlikle gerekli değildir. – brandon

cevap

0

HTTP_COOKIE de boş mu?

Django, istekte bir CSRF belirteci çerezi görmüyor olabilir ve yeni CSRF_COOKIE üretiyor ve metata yerleştiriyor olabilir.

İlgili konular