Моя первая попытка решить уязвимость DoS использовала подход, предложенный Gulzar, который в основном ограничивает количество вызовов, разрешенных с одного и того же IP-адреса. Я думаю, что это хороший подход, но, к сожалению, это привело к тому, что мой код не прошел тест производительности.
Поскольку я не смог заставить группу тестирования производительности изменить свой тест (политическая проблема, а не техническая), я изменил ее на ограничение количества вызовов, разрешенных в течение настраиваемого интервала. Я сделал как максимальное количество вызовов, так и настраиваемый временной интервал. Я также разрешил устанавливать значение 0 или отрицательное число, которое отключает ограничения.
Код, который необходимо защитить, используется внутренне несколькими продуктами. Таким образом, у каждой группы продуктов были свои QA-тесты и тесты производительности, а также значения по умолчанию, которые были как можно меньше, чтобы ограничить реальную атаку DoS, но все же прошли все тесты.
FWIW, интервал времени составлял 30 секунд, а максимальное количество звонков было 100. Это не вполне удовлетворительный подход, но он прост и практичен и одобрен корпоративной группой безопасности (другое политическое решение).
Продукты, использующие мою библиотеку, должны работать с Windows и AIX в дополнение к Linux. – 2009-11-13 20:34:46