【发布时间】:2016-10-19 18:27:18
【问题描述】:
我正在制作一个使用 WebSockets 在浏览器和节点服务器之间进行通信的 webapp。
如果您打开调试控制台 (F12),您可以访问套接字实例并对其进行写入。
例如,socket.send('packetname', 'data')
是什么阻止了某人打开控制台并写这样的东西?
socket.send(new Array(99999));
发送到服务器的所有这些数据可能会不堪重负,当它到达那里时,带宽已经被使用并且已经被处理。当然有验证,但此时为时已晚,资源已经用于处理它。
您也不能只检查数组的长度,因为有人可以发送一个数组,其中第一个元素是一个巨大的数组,或者其他任何东西。我认为没有办法计算字节大小,所以我想最好的选择是对数据进行字符串化以检查其大小(这非常慢)?
我所有的数据包都非常小。我正在寻找一种方法来防止超过一定大小的数据包被发送到服务器。这可能吗?
【问题讨论】:
-
你能把你的套接字放在别的东西里面让它私有
-
如果你使用Socket.io,那么
socket.io-stream之类的工具可以用来切断滥用的连接。 -
@tadman:我使用的是 primus 而不是 socket.io
-
如果您担心这一点,请不要使用 websocket。 Restful 和其他服务,必须发送一个 Content-Length 属性。我为下一部分道歉,我在这方面的术语和理解正在消失。 Websocket 的存活时间比传统的 Http 协议设计处理的时间要长得多。幸运的是,当 Http 协议达到其最大长度时,服务器会讨论设置另一个同步确认会话。你可以在那里结束它!
-
@user1438893:如何有效测量消息中使用的字节数?
标签: javascript node.js sockets server primus