你如何阻止客户端发送一个巨大的websocket数据包?

时间:2016-06-17 20:10:02

标签: javascript node.js sockets server primus

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

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

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

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

socket.send(new Array(99999));

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

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

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

2 个答案:

答案 0 :(得分:1)

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

您只需要处理它,就像您在收到意外数据量时立即断开客户端一样,并且可能会将原始列入黑名单,以便下次攻击尝试将会提前停止。

答案 1 :(得分:0)

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

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

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

这只是我能想到的一个潜在解决方案,但你需要提出这些方面的内容。