Форум сайта python.su
Добрый день.
Возможно ли для работы csrf токена сделать исключения для конкретного IP адреса?
Т.е. например по POST запросу от такого то ip не отрабатывать csrf токен?
Спасибо.
Офлайн
Думается сделать так:
csrf_exempt(view) и потом проверять выдергивать ip из request
мб кто сталкивался?
Офлайн
Попробуйте создать свой 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)
Офлайн
scidamа как подключить?
Попробуйте создать свой middleware, ответственный за проверку csrf. Например, как-то так:
if ip in trusted_ip_list:
if request.META['IP_ADDRESS'] in trusted_ip_list:
Отредактировано ivn (Апрель 17, 2018 21:06:13)
Офлайн
ivnИспользовать в перечне MIDDLEWARE_CLASSES свою MyCustomCsrfMiddleware вместо
Отредактировано scidam (Апрель 15, 2018 07:22:31)
Офлайн
scidam1.9.10
if ip in trusted_ip_list:
if request.META['IP_ADDRESS'] in trusted_ip_list:
Отредактировано ivn (Апрель 17, 2018 21:06:33)
Офлайн
Да.
if ip in trusted_ip_list:
Офлайн
Спасибо за ваши рекомендации.
Еще вот вопрос этот токен одноразовый?
Т.е. если пользователь получил токен может ли он по нему сделать сотню или даже больше запросов?
Как от этого принято защищаться? Мб что то есть на этот случай?
Спасибо еще раз.
Офлайн
Новый csrf токен нужен для каждой новой сессии/аутентификации; если его делать новым при каждом запросе, это даже может вызвать некоторые неудобства: например, человек заполнил форму, отправил ее, возникла ошибка, а потом он нажал “назад” в браузере, т.е. вернулся в первоначальную форму, исправил ее; теперь отправить ее бы не получилось, если бы с каждым запросом генерировался новый csrf токен.
Офлайн
Наверно уже не по теме, но как бороться с множественными запросами?
Например запустить JS код, который будет бесконечно отправлять POST запросы но создание каких то данных???
Офлайн