3

我正在制作一个使用 WebSockets 在浏览器和节点服务器之间进行通信的 webapp。

如果您打开调试控制台 (F12),您可以访问套接字实例并对其进行写入。

例如,socket.send('packetname', 'data')

是什么阻止了某人打开控制台并写这样的东西?

socket.send(new Array(99999));

发送到服务器的所有这些数据都可能是压倒性的,当它到达那里时,带宽已经被使用并且已经被处理。当然有验证,但此时为时已晚,资源已经用于处理它。

您也不能只检查数组的长度,因为有人可以发送一个数组,其中第一个元素是一个巨大的数组,或者其他任何东西。我认为没有办法计算字节大小,所以我猜最好的选择是对数据进行字符串化以检查其大小(这非常慢)?

我所有的数据包都非常小。我正在寻找一种方法来防止超过一定大小的数据包被发送到服务器。这可能吗?

4

2 回答 2

1

除非您完全控制客户端(您没有),否则您不能阻止客户端向您的系统发送任意大数据。客户端甚至不需要使用浏览器,因此浏览器内部的任何限制都不起作用。

您只需要处理它,例如,如果您获得意外数量的数据,则立即断开客户端连接,并可能将来源列入黑名单,以便更早地停止下一次攻击尝试。

于 2016-06-17T20:20:03.630 回答
1

对此可能没有任何“最佳”解决方案。我只想想想你可以在服务器端实现的东西,以检测是否可能发生这样的事情。就在客户端停止客户端而言,很难甚至不可能做到这一点。您的服务器旨在接受连接和数据,因此客户端可以尝试利用它。

我可以建议的一种可能的解决方案是对客户端在一次操作中发送多少数据设置一个“上限”。我不知道您的应用程序的性质,但考虑到您的应用程序的性质,客户端2500 bytes在一次操作中发送数据可能是完全不可能的。

在这种情况下,如果操作(接收的字节数)开始超过此上限,则可以断开连接。

这只是我能想到的一种潜在解决方案,但您需要按照这些思路提出一些建议。

于 2016-06-17T20:40:50.183 回答