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 уходит.

вот что страница.

Image of those editsImage of those edits

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