Ответ 1
Нет панацеи, но вы можете сделать DoS-атаки более сложными, выполнив следующие действия:
- Не ограничивайте свою готовность выполнять дорогостоящие операции от имени клиентов, не прошедших проверку подлинности.
- попытки проверки дросселя
- Операции дроссельной заслонки выполняются от имени каждого аутентифицированного клиента и размещают свою учетную запись в временной блокировке, если они слишком много времени делают за слишком короткое время.
- У вас есть аналогичный глобальный дроссель для всех клиентов, не прошедших проверку подлинности, и будьте готовы снизить этот параметр, если вы обнаружите атаку в процессе.
- У вас есть флаг, который вы можете использовать во время атаки, чтобы отключить все неаутентифицированный доступ.
- Не храните вещи от имени клиентов, не прошедших проверку подлинности, и используйте квоту для ограничения хранения для каждого аутентифицированного клиента
- В целом, отклоните все искаженные, неоправданно сложные или необоснованно огромные запросы как можно быстрее (и запишите их, чтобы помочь в обнаружении атаки).
- Не используйте чистый кеш LRU, если запросы от неаутентифицированных клиентов могут привести к выселению вещей из этого кеша, потому что вы будете подвержены атакам отравления кешем (где вредоносный клиент запрашивает множество разных нечасто используемых вещей, вызывая выселить все полезные вещи из вашего кеша и сделать гораздо больше работы для обслуживания ваших законных клиентов)
Помните, что важно прямо отказаться от подавленных запросов (например, с ответом HTTP 503: Service Unavailable или аналогичным ответом, соответствующим любому протокол, который вы используете), а не очереди в подавленных запросах. Если вы их ставите в очередь, очередь будет просто съесть всю вашу память, и атака DoS будет по крайней мере столь же эффективной, как и без дросселирования.
Некоторые более конкретные рекомендации для HTTP-серверов:
- Убедитесь, что ваш веб-сервер настроен на отклонение
POST
сообщений без сопроводительного заголовкаContent-Length
и отклонения запросов (и дросселирования оскорбительного клиента), которые превышают указанныйContent-Length
, и отклонять запросы с помощьюContent-Length
, который необоснованно длинный для обслуживания, чтоPOST
(илиPUT
) нацелен на