ある種の粗雑な 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);
}
};
これらの種類の攻撃に対して効果的であると証明できると思いますが、改善または書き換えることができるかどうか疑問に思っていますか?
これまでのところ、1 秒あたり 3 行または 2.5 行を超えるものはすべてスパムのように思えますが、時間が進むにつれて (開始マークが設定されているため... まあ... 最初に)、違反者は単にしばらくアイドル状態になる可能性があります。その後フラッドを開始し、1 分間に 1 行を通過することは事実上ありません。
また、私は Mootools と Lo-Dash ライブラリを使用していることを付け加えたいと思います (おそらくそれらはいくつかの興味深い方法を提供します) が、これがネイティブ JS を使用して実行できる場合は望ましいでしょう。
どんな洞察も大歓迎です!