Как избежать злоупотребления REST API? заблокировать много вызовов от одного и того же клиента JAX-RS (Dropwizard)

Не уверен, что я прав, но давайте предположим, что у меня есть REST API и конечная точка, которая, например, создает некоторый ресурс, скажем, @POST создать пользователя.

Как защитить мое приложение от пользователей, которые делают цикл с примерно 10000 вызовами API для создания бесполезных ресурсов?

Можно ли написать фильтр, который блокирует такое поведение? Я надеюсь, вы понимаете, о чем я.

2 ответа

У вас есть много вариантов:

  • блокировать ip, когда определенный ip генерирует много запросов
  • блокировка ip+useragent+ другая информация о браузере пользователя
  • заблокировать пользователя, используя сопоставление с поведением
  • очевидный выбор - скрыть некоторые методы REST за подтверждением по электронной почте (процесс регистрации)

Скажем в псевдокоде ABUSING_ID = md5(ip+useragent)

  • у вас может быть что-то вроде системы ценообразования, поэтому каждый вызов API имеет цену (от 0 до 10) и сохраняет каждый ABUSING_ID+ их цену вызова API в базе данных (т.е. на один день). Таким образом, когда общая цена запросов на данный ABUSING_ID превышает пороговое значение, вы блокируете их. (Более формальный и, я уверен, лучший подход - это то, что @ roman-vottner предложил алгоритм Leaky bucket)

Вы можете реализовать эти схемы на разных уровнях системы (на стороне клиента, на стороне балансировки нагрузки / на стороне веб-сервера ( fail2ban), на уровне приложения)

Чем больше уровней вы пройдете, тем лучше.

  • некоторые новички могут использовать графическую автоматизацию, чтобы щелкнуть внутри вашего пользовательского интерфейса (если он предоставляет ваш API), поэтому вам нужна защита на стороне клиента.

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

  • другой вид использует что-то вроде phantonjs для эмуляции среды браузера (защита на стороне клиента)

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

  • прокси-серверы / tor / botnets / предотвращение отпечатков пальцев в браузере (в основном, изменение пользовательского агента и других деталей при каждом запросе) и т. д.

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

Весь мир в войне:-)

PS Я ничего не говорил об авторизованных вызовах API (токены и т. Д.), Потому что авторизованные вызовы API гораздо легче перехватить, здесь речь идет о незащищенных REST-запросах.

PPS Существует еще один показатель, но вы должны рассматривать его как последнее средство: если ваш сервис международный, глобального уровня, но у вас слишком много мошенничества, скажем, из вымышленного мошенничества, и это мошенничество вредит вашему бизнесу больше, чем хороший трафик Чтобы получить прибыль, вы должны заблокировать всю страну и сделать уведомление, чтобы хорошие клиенты из этой страны могли зарегистрироваться по более строгому протоколу.

Я согласен с ответом @ странного Карго. Если вы не хотите реализовывать это самостоятельно, есть несколько служб, которые будут анализировать запросы и рекомендовать, блокировать их или нет, у меня был довольно хороший опыт работы с ShieldSquare

Другие вопросы по тегам