我正在制作一个WebApp,它使用Websocket进行浏览器和节点服务器之间的通信。
如果打开调试控制台(F12),则可以访问套接字实例并写入它。
例如,socket.send('packetname', 'data')
是什么阻止某人打开控制台并写下这样的东西?
socket.send(new Array(99999));
将所有这些数据发送到服务器的所有数据都可能是压倒性的,到达那里时,带宽已经使用并且已经处理过。当然有验证,但是那时为时已晚,资源已经花在处理上。
您还不能仅仅检查数组的长度,因为有人可以发送一个数组,而第一个元素是一个巨大的数组,或者实际上是任何东西。我认为没有一种计算字节大小的方法,所以我想最好的选择是将数据串起以检查其大小(非常慢)?
我的所有数据包都很小。我正在寻找一种防止一定尺寸的数据包发送到服务器的方法。这可能吗?
除非您对客户端有完全控制(您不这样做),否则您将不阻碍客户端向系统发送任意大数据。客户端甚至不需要使用浏览器,因此浏览器内部的任何限制都无法正常工作。
您只需要处理它,例如,如果您获得了意外的数据并可能将其黑名单列入来源,请立即断开客户的连接,以便较早地停止下一次攻击尝试。
可能没有任何"最佳"解决方案。我只想考虑您可以在服务器端实施的事情,以检测是否可能发生这种情况。至于停止客户端的客户,很难或可能不可能这样做。您的服务器旨在接受连接和数据,因此客户可以尝试利用此功能。
我可以建议的一种可能的解决方案是对客户在单个操作中发送多少数据的"上限"。我不知道您的应用程序的性质,但是鉴于您的应用程序的性质,也许一个单个操作中发送2500 bytes
的客户是完全不可能的。
在这种情况下,如果一个操作(接收到的字节)超过此上限,则可以删除连接。
这只是我能想到的一个潜在解决方案,但是您需要沿着这些行提出一些东西。