【发布时间】:2013-05-17 09:30:13
【问题描述】:
我想知道是否有可能实现某种粗略的 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 来完成,那就更好了。
非常感谢任何见解!
【问题讨论】:
-
如果有人向网站发送垃圾邮件,他们可能没有使用浏览器来执行此操作(即他们完全绕过了 JavaScript)。在任何情况下,如果有人将文本复制粘贴到输入字段,您的方法要么崩溃,要么认为他们正试图淹没网站。
-
@Juhana:但我正在从服务器接收事件(我无法控制)。
-
那我真的不明白你在做什么,对不起。如果事件来自服务器,试图捕获的 keydown 事件是什么?
-
我使用 keydown 只是为了说明我的意思,它可能是一个简单的函数(实际上是 Mootools 的 onSuccess 函数)。也许我并不清楚,应该改变它。
-
如果您使用的是 AJAX,那么您是在请求事件,而不是接收它们。你在说什么洪水?
标签: javascript spam-prevention