Как ограничить DOS-атаку с помощью Web API
Я планирую разработать интернет-сайт с использованием MVC4 и Web APi. Это простое приложение, которое будет отображать информацию о клиенте на основе поиска.
Для функции поиска я вызываю webApi с помощью метода get Ajax (я знаю, что должен использовать Post, но учтите, что это текущая реализация).
Мой вызов Api "/api/Data/getSearchResults/?companyName='" + companyName
Я чувствую, что этот кусок линии можно использовать как DOS-атаку, чтобы сломать мой сервер. Есть ли способ, которым я могу использовать библиотеки Microsoft Anti-XSS или атрибуты ValidateAntiForgeryToken или любой другой механизм, чтобы гарантировать, что запрос генерируется подлинными пользователями, а не любыми автоботами.
На моем сайте включен анонимный доступ.
2 ответа
Есть библиотека с именем WebApiThrottle, которая определяет ThrottlingHandler
Вы можете использовать для программного ограничения количества запросов в секунду / минуту / час... в зависимости от IP-адреса или других атрибутов вызывающего абонента.
Другой вариант - действовать на уровне IIS, и, конечно, вы можете использовать оба, чтобы иметь лучший контроль.
Это очень старый вопрос, но я надеюсь, что эта ссылка поможет кому-то другому.
Теперь мы используемAPI Protector .NET( https://apiprotector.net/) для защиты наших API от DoS- и DDoS-атак.
Это библиотека, совместимая также с MVC, WebApi и.NetCore, что дало нам очень хорошие результаты, как в простоте, так и в основном в ремонтопригодности. С помощью этой библиотеки вы можете защитить каждую функцию вашего API буквально с помощью одной строки и очень специфическим образом.
Как объясняется на веб-сайте API Protector .NET:
Если вы ограничиваете свой API, как правило, N запросами на IP или на пользователя, этого достаточно, чтобы эти N запросов могли использоваться для постоянного воздействия на одну и ту же конкретную тяжелую функцию, которая может серьезно замедлить работу всей службы.
"Каждая функция вашего API должна быть ограничена определенным образом в зависимости от нормальной частоты использования и стоимости обработки, которую эта функция подразумевает для сервера, в противном случае вы не защищаете свой API".
API Protector .NET позволяет без усилий защищать каждую функцию вашего.NET API от DoS- и DDoS-атак простым, декларативным и поддерживаемым способом.
Единственным отрицательным моментом является то, что он стоит 5 долларов США, но он дал нам то, что мы искали, по очень низкой цене, в отличие от библиотеки WebApiThrottle, которая, хотя это был первый вариант, который я пробовал (потому что он бесплатный), в итоге он оказался непрактично и невозможно обслуживать, когда мы хотели защитить различные функции определенным образом (что, как объяснялось, критически важно для эффективной защиты).
API Protector .NET позволяет комбинировать различные защиты (по IP, по пользователю, по ролям, в целом и т. Д.), Украшая каждую функцию одной строкой, что упрощает реализацию и обслуживание. Подробное объяснение читайте: https://apiprotector.net/how-it-works/
Интересный анекдот заключается в том, что некоторое время назад, когда мы все еще защищали наши API с помощью WebApiThrottle, мы провели несколько тестов, имитирующих DDoS-атаки, с множеством параллельных запросов с разных хостов, и по какой-то причине (я думаю, что это связано с синхронизацией потоков), в функции приходили пачки запросов, и поздно, когда сервер уже был перегружен, началось троттлинг. Это, в дополнение к сложной ремонтопригодности, не вселяло в нас особой уверенности в надежной защите, и поэтому мы в конечном итоге попробовали эту альтернативу, которая хорошо работает.
Под атакой DOS я предполагаю, что вы имеете в виду атаку на вашу систему, когда постоянные запросы делаются для того, чтобы вызвать истощение ресурсов из-за постоянного выполнения поискового запроса компании к вашей базе данных.
Чтобы предотвратить это, вы можете регистрировать удаленный IP-адрес при каждом запросе и регулировать количество ответов, чтобы на каждый IP-адрес приходилось только очень много в минуту. Любые запросы в дополнениях могут быть удовлетворены с помощью искусственной задержки (например, Thread.Sleep()
). Этот подход будет более ограниченным против DDoS-атаки, когда удаленные IP-адреса будут в широком диапазоне, а также предполагает, что поиск IP-адреса требует меньше ресурсов, чем поиск компании, но все равно поможет.
MS Anti-XSS защитит вас только от межсайтовых сценариев и не защитит от DoS / DDoS. Токен Anti Forgery защитит вас только от подделки межсайтовых запросов - даже если у вас есть токен, бот может просто запросить у вашей страницы захват токена и затем передать его в вашу функцию API.
CAPTCHA может быть другим решением, но вам нужно, чтобы они ввели код CAPTCHA на вашей веб-странице, а затем подтвердили его в своем веб-методе API.