首页 > 解决方案 > 如何防止人们从检查器中过载套接字 node.js 服务器?

问题描述

我创建了一个网站,计算用户单击按钮时的总点击次数。单击按钮时,它会向服务器发出“Press”,将 clicks 变量增加 1。但是,人们可以进入检查器并键入一个 for 循环,例如

for(var i =0; i <10000; i++){
    socket.emit('Press');
} 

它只会弄乱计数。有没有办法防止这种情况?

标签: javascriptnode.js

解决方案


TL;DR:你不能。您可以阻止一些或减慢它们的速度,但总会有解决方法。

长(呃)回答:有几种方法可以防止人们做这样的事情。尽管有一些方法可以解决它们,但它们可能会起作用。第一个是debugger循环。这些不适用于所有浏览器,但会停止执行任何代码,直到您手动继续。它们可能看起来像这样,只是位于您已经有重复内容的地方:

while (true) {
debugger;
}

另一种方法是将所有代码隐藏在一个函数中(可能是一个 IIFE)。这使得它无法从window对象访问。

(function() {
console.log("I'm hidden!");
})();

您还可以混淆或缩小您的代码,使其更难理解。

所有这些方法都可以绕过。debugger如果控制台未打开,循环将不起作用。由于您可以通过其他方式执行 JavaScript,因此这并不总是有效。浏览器扩展可以替换您的脚本并使其中的任何内容在window对象上可用。混淆只会减慢人们的速度。

但是:您还没有成为 XY 问题的受害者。你问的是问题,而不是解决方案。因此,您可以在服务器端实现目标。如果您太快收到太多消息,只需切断连接即可。只要确保您不会意外关闭良性连接即可。


推荐阅读