Уменьшить количество запросов на пользователя (с атакой в стойку и разработкой)
Я использую https://github.com/kickstarter/rack-attack/ для регулирования запросов к определенным URL.
Документы по Rack-атакам показывают, как регулировать IP-адреса или параметры запроса, но я бы хотел, чтобы они обрабатывали запросы на пользователя. Таким образом, независимо от IP, пользователь должен иметь возможность сделать не более n запросов за определенный промежуток времени.
Мы используем devise для аутентификации, и я не могу придумать простой способ уникальной идентификации пользователей на основе запроса.
Должен ли я хранить идентификатор пользователя в сессии / куки? Может быть, уникальный хэш? Что вы думаете о лучшем способе сделать это?
1 ответ
Догадаться. Devise уже хранит идентификатор пользователя в сеансе. Код будет выглядеть примерно так:
Rack::Attack.throttle('something', limit: 6, period: 60.seconds) do |req|
req.env['rack.session']["warden.user.user.key"][0][0] if some_condition?
end