Как отключить защиту CSRF от Django за прокси - PullRequest
2 голосов
/ 25 января 2011

Мне нужно запустить систему Django (назовем ее Альфред) за прокси.Оба находятся в одной сети.В качестве прокси я использую django-httpproxy Юрия Вандермера.(см. его страницу yvandermeer.net)

Обе системы работают под управлением Django версии 1.2.4

Обе системы находятся в одной (закрытой) сети и также на одном и том же IP.У меня есть прокси-сервер, работающий на порту 8000 и Альфред на порту 1337. Мне нужно войти на Альфреда, используя его / admin сайт, который поставляется по умолчанию с Django (и который я включил).Это работает через порт 1337, но мне нужно получить к нему доступ через порт 8000.

Когда я пытаюсь это сделать, Альфред выдает ошибку CSRF 403 и говорит мне, что я действительно что-то вроде человека-человека.the-middle (- и Альфред совершенно прав, говоря так).

Я попытался несколько вещей, чтобы отключить защиту Alfreds CSRF:

  1. Я прокомментировал CsrfViewMiddleware в настройках.py в MIDDLEWARE_CLASSES
  2. Я создал disable.py и добавил его класс disableCSRF в MIDDLEWARE CLASSES (на самом деле я пробовал каждую позицию [!]), как указано на этом сайте (questions / 1785772)

    #disable.py
    class DisableCSRF(object):
        def process_request(self, request):
            setattr(request, '_dont_enforce_csrf_checks', True)
  3. Я создал disable.py и добавил его класс disableCSRF к КЛАССАМ СРЕДНЕГО ОБЕСПЕЧЕНИЯ (снова я попробовал каждую позицию), как упомянуто в этом другом посте здесь: http://hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html

    #disable.py
    class DisableCSRF(object):
        def process_view(self, request, callback, callback_args, callback_kwargs):
            setattr(request, '_dont_enforce_csrf_checks', True)
  4. Я пытался закомментировать механизм защиты Csfr в ​​django / middleware / csrf.py, но нашел соответствующую часть вокруг строки 190, а не вокруг строки 160, как упомянуто наis site: questions / 1650941 /

Ничего из перечисленного не сработало.Я всегда получаю сообщение об ошибке 403 при попытке войти через / admin

Как отключить защиту CSRF на Альфреде?Можно ли просто отключить его для / admin?Я бы предпочел, чтобы я мог сделать это с помощью промежуточного программного обеспечения, как упомянуто в 2. и 3., а не путем комментирования чего-либо в источнике, как в 4. Если есть промежуточное программное обеспечение, это было бы здорово.*заранее спасибо!:)

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Вы можете использовать декоратор @csrf_exempt в функциях представления, чтобы отключить csrf для этого представления.См. документацию

0 голосов
/ 25 января 2011

Ошибка была на моей стороне.Проверив логи сервера, я понял, что не Альфред выдавал ошибку, а Прокси (django-httpproxy).Возможно, потому что оба сервера работают на localhost, и я также отправляю свои запросы с localhost.Я отключил CSRF для Прокси и Альфреда.С этой настройкой я больше не получаю 403 ошибки.

К сожалению, django-httpproxy теряет куки, поэтому я не могу войти из-за этого.t использовать django-httpproxy в качестве обратного прокси.

...