Mamy małą witrynę, która dopiero zaczyna być wystawiona na zewnątrz. W większości przypadków działa bardzo dobrze, ale czasami otrzymujemy 403 błędy z komunikatem "CSRF FAILURECSRF cookie not set" z jednego z formularzy. Postać zdecydowanie ma {% csrf_token %}
cenie, a nasze middleware wygląda następująco:Sporadic 403 Błędy "CSRF FAILURECSRSRF cookie not set" z django
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',
)
forma działa dobrze dla większości ludzi, ale raz dziennie dostaję e-mail z przypadku awarii. Wiadomość e-mail zawiera rzeczywisty wniosek, który wygląda następująco (I zostały usunięte resztę danych POST, aby ukryć prywatne dane, ale opuścił csrfmiddlewaretoken):
<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 nie odpowiada csrfmiddlewaretoken , co według mnie jest przyczyną problemu, ale nie mogę zrozumieć, jak są one niezsynchronizowane w przypadku niektórych zgłoszeń, ale nie w innych. Strona jest dość prostą formą z tylko kilkoma polami.
Jakieś sugestie, gdzie powinienem wyglądać? Używam najnowszego Django 1.4.1 na CentOS przy użyciu mod_wsgi przez apache.
Edit: Jedyną rzeczą, która wydaje się dziwne w porównaniu do udanych wniosków jest to, że tutaj sekcja COOKIES:{}
jest pusta, co doprowadziłoby mnie podejrzewać, że być może po prostu mieć niepełnosprawne cookies w swojej przeglądarce, ale dlaczego pojawia się z CSRF_COOKIE w sekcji META?
Dzięki za pomoc!
Brandon
Występuję właśnie w tym samym problemie. Czy kiedykolwiek wymyśliłeś rozwiązanie? –
Sortuj. Problem polegał na tym, że niektórzy użytkownicy mieli wyłączone pliki cookie i nie ma sposobu, aby to naprawić ze strony serwera. Zakończyliśmy wyłączanie ochrony CSRF dla publicznej postaci stojącej. Nie rób tego dla stron logowania lub innych poufnych danych, ale ochrona CSRF nie zawsze jest niezbędna. – brandon