Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru
  • Начало
  • » Django
  • » Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса? [RSS Feed]

#1 Апрель 13, 2018 15:39:13

ivn
Зарегистрирован: 2017-01-13
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Добрый день.
Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?
Т.е. например по POST запросу от такого то ip не отрабатывать csrf токен?
Спасибо.

Офлайн

#2 Апрель 13, 2018 16:18:14

ivn
Зарегистрирован: 2017-01-13
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Думается сделать так:
csrf_exempt(view) и потом проверять выдергивать ip из request
мб кто сталкивался?

Офлайн

#3 Апрель 14, 2018 05:36:25

scidam
Зарегистрирован: 2016-06-15
Сообщения: 281
Репутация: +  34  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Попробуйте создать свой middleware, ответственный за проверку csrf. Например, как-то так:

 from django.conf import settings
# some utility function that gets clients ip address, e.g. 
def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip
# middleware.py
class MyCustomCsrfMiddleware(CsrfViewMiddleware):
    def process_view(self, request, callback, callback_args, callback_kwargs):
        ip = get_client_ip(request)
        trusted_ip_list = getattr(settings, 'TRUSTED_CSRF_IPS', [])
        if trusted_ip_list:
            if request.META['IP_ADDRESS'] in trusted_ip_list:
                return self._accept(request)
        return super().process_view(request,callback, callback_args, callback_kwargs)
# TRUSTED_CSRF_IPS = ["103.12.12.7", ] # shold be defined in your settings.py

Отредактировано scidam (Апрель 14, 2018 05:37:46)

Офлайн

#4 Апрель 15, 2018 00:00:50

ivn
Зарегистрирован: 2017-01-13
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

scidam
Попробуйте создать свой middleware, ответственный за проверку csrf. Например, как-то так:
а как подключить?

я как понимаю, вот это имеется ввиду:
 if ip in trusted_ip_list:
вместо:
 if request.META['IP_ADDRESS'] in trusted_ip_list:

?

Отредактировано ivn (Апрель 17, 2018 21:06:13)

Офлайн

#5 Апрель 15, 2018 05:41:35

scidam
Зарегистрирован: 2016-06-15
Сообщения: 281
Репутация: +  34  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

ivn
Использовать в перечне MIDDLEWARE_CLASSES свою MyCustomCsrfMiddleware вместо
django.middleware.csrf.CsrfViewMiddleware.
Здесь возможны вариации от версии Django, например, в Django 2.0
MIDDLEWARE_CLASSES теперь просто MIDDLEWARE.
В любом случае нужно ознакомиться c тем как писать middleware для django вашей версии.

Отредактировано scidam (Апрель 15, 2018 07:22:31)

Офлайн

#6 Апрель 17, 2018 21:03:11

ivn
Зарегистрирован: 2017-01-13
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

scidam
1.9.10

я как понимаю, вот это имеется ввиду:
 if ip in trusted_ip_list:
вместо:
 if request.META['IP_ADDRESS'] in trusted_ip_list:

?

Отредактировано ivn (Апрель 17, 2018 21:06:33)

Офлайн

#7 Апрель 18, 2018 05:17:05

scidam
Зарегистрирован: 2016-06-15
Сообщения: 281
Репутация: +  34  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Да.

  if ip in trusted_ip_list:

правильней будет (это был псевдокод… )

Офлайн

#8 Апрель 20, 2018 18:31:12

ivn
Зарегистрирован: 2017-01-13
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Спасибо за ваши рекомендации.
Еще вот вопрос этот токен одноразовый?
Т.е. если пользователь получил токен может ли он по нему сделать сотню или даже больше запросов?
Как от этого принято защищаться? Мб что то есть на этот случай?
Спасибо еще раз.

Офлайн

#9 Апрель 22, 2018 04:02:22

scidam
Зарегистрирован: 2016-06-15
Сообщения: 281
Репутация: +  34  -
Профиль   Отправить e-mail  

Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?

Новый csrf токен нужен для каждой новой сессии/аутентификации; если его делать новым при каждом запросе, это даже может вызвать некоторые неудобства: например, человек заполнил форму, отправил ее, возникла ошибка, а потом он нажал “назад” в браузере, т.е. вернулся в первоначальную форму, исправил ее; теперь отправить ее бы не получилось, если бы с каждым запросом генерировался новый csrf токен.

Офлайн

  • Начало
  • » Django
  • » Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version