Вопрос по – Django CSRF cookie HttpOnly

9

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

Ваш Ответ

3   ответа
0

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

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

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

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

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

Image of those edits Image of those edits

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

Хотя я считаю, что шансы imgur уходить выше, чем шансы github уходить, я сделал так, как просили.
11

проверьте принятый ответ. Для 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
В этом коде есть опечатка. Должен читаться response = super (Foo, self) .process_response (запрос, ответ)
@MikeMcMahon Возможно, вы имели в видуCSRF_COOKIE_HTTPONLY?
@ adam.lofts Да, спасибо!
Я попробовал второй метод, и он прекрасно работает, спасибо! Просто добавили промежуточное программное обеспечение до csrf (очевидно, но это заняло у меня некоторое время, как я его назвал после) и поместила CSRF_COOKIE_NAME в настройках, и это все. Mark
@ Марк, я знаю, что это старый, но лучше использоватьglobal_settings.CSRF_COOKIE_NAME если вы не хотите управлять этим параметром.
20

CSRF_COOKIE_HTTPONLY, доступно в Django 1.6+.

Для тех, у кого есть обновленный экземпляр Django, это должно быть ответом. Все остальное взломать.

Похожие вопросы