Ограничение анонимных петиций в Django

У меня есть целевая страница, где вы можете получить бюджеты. Я использую JS/HTML в Frontend и Django в Backend. Я хотел бы ограничить петиции для анонимных пользователей, потому что вам не нужно быть зарегистрированным, чтобы получить бюджеты.

Я получаю IP следующим образом:

def visitor_ip_address(request):

   x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

   if x_forwarded_for:
     ip = x_forwarded_for.split(',')[0]
   else:
     ip = request.META.get('REMOTE_ADDR')
   return ip

Дело в том, что я не знаю, является ли лучшим способом получить IP из одной сессии или одного и того же ноутбука, для ограничения. Моя цель - ограничить петиции в инкогнито навигации также, с того же ноутбука.

Как лучше всего это сделать? Спасибо

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

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

# initialize first-time visitor
if "first_usage" not in request.session:
    request.session['first_usage'] = datetime.datetime.now()

now = datetime.datetime.now()
delta = now - request.session['first_usage']
hours = delta.total_seconds() / 3600.0

# now you can refuse a petition if the user first visited the site 
# less than some number of hours ago. And you can store the dates of
# the last submitted petition into the session, to check that this
# anonymous user is not exceeding a more precise rate limit.
Вернуться на верх