Мне было интересно, можно ли реализовать какую-то грубую защиту от флуда на JavaScript. Мой код получает события с сервера через AJAX, но иногда эти события могут быть довольно частыми (я ими не управляю).
Я попытался придумать способ борьбы с этим и написал небольшой скрипт: http://jsfiddle.net/Ry5k9/
var puts = {};
function receiverFunction(id, text) {
if ( !puts[id] ) {
puts = {};
puts[id] = {};
}
puts[id].start = puts[id].start || new Date();
var count = puts[id].count = puts[id].count + 1 || 0;
var time = (new Date() - puts[id].start) * 0.001;
$("text").set("text", (count / time.toFixed()).toString() + " lines/second");
doSomethingWithTextIfNotSpam(text);
}
};
который, я думаю, может оказаться эффективным против таких атак, но мне интересно, можно ли его улучшить или, возможно, переписать?
До сих пор я думаю, что все, что превышает 3 или 2,5 строки в секунду, кажется спамом, но по мере того, как время идет вперед (потому что начальная отметка была установлена ... ну ... в начале), злоумышленник мог просто какое-то время бездействовать и затем начать флуд, фактически никогда не передавая 1 строку в минуту.
Кроме того, я хотел бы добавить, что я использую библиотеки Mootools и Lo-Dash (возможно, они предоставляют некоторые интересные методы), но было бы предпочтительнее, если бы это можно было сделать с помощью собственного JS.
Любое понимание очень ценится!