Django 1.6 Ошибки CSRF 403

У меня есть сайт, на котором работает Django 1.6.10. Недавно у некоторых из наших администраторов возникли проблемы со входом в систему, и они получили страницу с ошибкой CSRF 403. Им пришлось удалить все свои файлы cookie, чтобы сайт снова мог войти в систему. Это заставило меня задаться вопросом, было ли это более распространенным, поскольку страница ошибки CSRF не регистрируется. Я включил ведение журнала и вижу, что около 10% сообщений имеют проблемы.

Settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.csrf',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request',
'django.core.context_processors.static',
)

MIDDLEWARE_CLASSES = (
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',

'linaro_django_pagination.middleware.PaginationMiddleware',

'django.middleware.cache.FetchFromCacheMiddleware',
)

Представления, вызывающие проблему, представляют собой общие представления на основе классов с формой публикации комментариев. Форма имеет {% csrf_token %} внутри тегов формы. Возникающая ошибка REASON_NO_CSRF из промежуточного программного обеспечения csrf.

<WSGIRequest
path:/accounts/login/,
GET:<QueryDict: {u'next': [u'/profile/edit/']}>,
POST:<QueryDict: {u'username': [REDACTED], u'csrfmiddlewaretoken':     
[u'Ns42nlyOUgLRUatcjjr0cfpRYwVSDETk'], u'password': [u'REDACTED']}>,
COOKIES:{'HIRO_COOKIE':     
'data=&newSession=false&id=REDACTED&timestamp=1414023546237',
'OX_plg': 'swf|shk|pm',
'SS_ARE_Override.traceLevel': 'WARN',
'__gads':   
'ID=b5f389086388b528:T=1413419752:S=ALNI_MaqCqguvaHWhG76FGjhHzPTieaGeA',
'__qca': 'P0-2120806691-1413419758360',
'__sonar': '749077714819215977',
'_bsef2f5b6aaad756f2445ed7606b648325': '1',
'acudeoSession.': '%7B%22time%22%3A1421376382060%2C%22adIndex%22%3A1%7D',
'ebNewBandWidth_.www.REDACTED.com': 'REDACTED',
'mlUserID': '9X8L0kMS8ypL',
'targus.BirthYear': '',
'targus.ap_seg': '',
'targus.gender': '',
'targus.matched': '1',
'targus.segment': '000',
'targus.zip': '',
'vsl_userid': 'c4ee281a94b19b5cb09d83ee93e98f55'},

META:{'CONTENT_LENGTH': '92',
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
u'CSRF_COOKIE': u'CV5Vh0mpa578LnKGK1Lfj6pRVB1cwc6E',
'DOCUMENT_ROOT': '/usr/local/apache2/htdocs',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_ACCEPT':     

'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;
q=0.8',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_ACCEPT_LANGUAGE': 'en,en-GB;q=0.8',
'HTTP_CACHE_CONTROL': 'max-age=0',
'HTTP_CONNECTION': 'close',

Общим для всех ошибок является то, что в разделе Cookie отсутствует csrftoken, который должен быть там. Я не могу понять, почему django не всегда отправляет файлы cookie в представление, потому что это представление на основе классов, и у меня все настроено в settings.py, как говорится в документах django. Это также происходит, когда люди пытаются войти в систему или в основном публикуют любые сообщения.


person finnthehuman    schedule 01.02.2015    source источник
comment
Похоже, это происходит только с пользовательскими агентами Chrome.   -  person finnthehuman    schedule 01.02.2015
comment
саааме. Я дважды проверил, и действительно есть токен csrf, но я не знаю, неверен ли он или как это проверить.   -  person Steve Yeago    schedule 23.03.2015


Ответы (1)


Баг описан здесь. Это ошибка в питоне.

https://code.djangoproject.com/ticket/24492

person Steve Yeago    schedule 25.03.2015
comment
Спасибо за совет. Я применил патч к локализованной версии Cookies.py и думаю, что он исправил ошибки, которые я видел. - person finnthehuman; 27.03.2015
comment
так что отметьте мой ответ как завершенный, тогда мне нужны эти интернет-деньги, детка. я перешел обратно на LTS. - person Steve Yeago; 27.03.2015