Django CSRF cookie HttpOnly

Можно ли установить cookie django csrf только для http? Похож на SESSION_COOKIE_HTTPONLY с cookie сессии, но для csrf?

3 ответа

Решение

Новая настройка, CSRF_COOKIE_HTTPONLY, доступно в Django 1.6+.

Для Django1.6+, проверьте принятый ответ. Для Django1.5 и prev нет опции для этого.

Вы можете переопределить process_response() метод django.middleware.csrf.CsrfViewMiddleware и использовать настроенный вместо CsrfViewMiddleware в MIDDLEWARE_CLASSES

class Foo(CsrfViewMiddleware):
    def process_response(self, request, response):
        response = super(Foo, self).process_response(request, response)
        response.cookies[settings.CSRF_COOKIE_NAME]['httponly'] = True
        return response

Или в другом промежуточном программном обеспечении, которое вызывается после CsrfViewMiddleware в ответ

class Foo(object):
    def process_response(self, request, response):
        if settings.CSRF_COOKIE_NAME in response.cookies:
            response.cookies[settings.CSRF_COOKIE_NAME]['httponly'] = True
        return response

Вы могли бы на самом деле исправить свои файлы Django, чтобы имитировать функциональность, присутствующую в более поздних версиях, если у вас версия ниже 1.6.

Патч довольно прост, и измененные файлы видны здесь:

https://github.com/django/django/commit/720888a14699a80a6cd07d32514b9dcd5b1005fb

Снимки, показывающие правки, предоставляются на случай, если GitHub исчезнет.

Вот остальная часть этой страницы.

Изображение этих правокИзображение этих правок

Вам не нужно беспокоиться о том, что они будут перезаписаны при обновлении, поскольку обновление будет включать эти строки.

Другие вопросы по тегам