В сфере мошенничества это называется контролем скорости, а в управлении трафиком это похоже на «формирование трафика». В основном вы разрешаете ограниченное использование за период времени, так что, например, вы можете разрешить только 10 запросов в минуту / IP-адрес.
Для каждого «запроса» определите удаленный адрес (getpeername () в C), эта функция всегда будет IP-адресом удаленного пользователя. Затем просто посчитайте за период времени, как могут обрабатываться запросы, и, если вы превысите лимит, сделайте что угодно. В псевдокоде
Get block for remote ip
If time-now is new window, then reset usage to zero
Add one to usage count
If usage > allowance then .....
Else if usage > allowance*0.75 then slow-down
Else ok
Хотя я показал один период, большинство реализаций обычно усредняются за несколько периодов, например каждую минуту в течение часа и т. Д., Они также имеют тенденцию допускать всплески и ограничивать только устойчивые нагрузки, но это зависит от профиля, который вы хотите разрешить.
Если это для API, нормально просто замедлить запрос, а не выдавать серьезную ошибку. Нет гарантии, что клиент на другом конце обработает ошибку. Если это пользовательский экран, вы можете отобразить превышенные пределы.
Вы, конечно, можете ограничить любой размер по вашему желанию: IP-адрес, ссылку, тип браузера !, pageurl, cookie. Если вы используете getpeername, имейте в виду, что несколько одновременно работающих пользователей могут иметь один и тот же удаленный IP-адрес, если они находятся за общим частным маршрутизатором.
person
rlb
schedule
18.03.2013