Подтвердить что ты не робот

Каков наилучший способ реализации алгоритма ограничения скорости для веб-запросов?

Возможные/частичные дубликаты:

Я ищу лучший способ реализовать алгоритм ограничения скорости движения по времени для веб-приложения, чтобы уменьшить атаки спама или грубой силы.

Примерами использования могут быть "Максимальное количество неудачных попыток входа в систему из заданного IP-адреса за последние 5 минут", "Максимальное количество сообщений (голосов/голосов и т.д.) за последние N минут".

Я бы предпочел использовать алгоритм временного окна, а не жесткий reset статистики каждые X минут (например, twitter api).

Это будет для приложения С#/ASP.Net.

4b9b3361

Ответ 1

Используйте хэш-таблицу с быстрой памятью, например memcached. Ключи будут целью, которую вы ограничите (например, IP), и истечение каждого сохраненного значения должно быть максимальным временем ограничения.

Значения, хранящиеся для каждой клавиши, будут содержать сериализованный список последних N попыток, которые они совершили при выполнении действия, а также время для каждой попытки.

Ответ 2

Мы обнаружили Token Bucket - лучший алгоритм для такого ограничения скорости. Он широко используется в маршрутизаторах/коммутаторах, поэтому наши сотрудники работают с этой концепцией.

Ответ 3

Просто добавьте более "современный" ответ на эту проблему: для .NET WebAPI WebApiThrottle отлично работает и, вероятно, делает все вы хотите из коробки.

Он также доступен в NuGet.

Реализация занимает всего минуту или около того, и она очень настраивается:

config.MessageHandlers.Add(new ThrottlingHandler()
{
    Policy = new ThrottlePolicy(perSecond: 1, perMinute: 30, perHour: 500, perDay:2000)
    {
        IpThrottling = true,
        ClientThrottling = true,
        EndpointThrottling = true
    },
    Repository = new CacheRepository()
});

Ответ 4

Вы найдете эту страницу интересной:

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

Раздел для поиска начинается следующим образом:

Предотвращение атаки на отказ в обслуживании (DOS)

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

EDIT: Аналогичный вопрос здесь:

Лучший способ реализовать настройку запроса в ASP.NET MVC?