javascript - 如何防止客户端发送巨大的 websocket 数据包?

标签 javascript node.js sockets server primus

我正在制作一个使用 WebSockets 在浏览器和 Node 服务器之间进行通信的网络应用。

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

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

是什么阻止某人打开控制台并编写这样的内容?

socket.send(new Array(99999));

所有这些发送到服务器的数据都可能是巨大的,当它到达那里时,带宽已经被占用并且已经被处理过了。当然有验证,但那时已经太晚了,资源已经花在了处理上。

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

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

最佳答案

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

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

关于javascript - 如何防止客户端发送巨大的 websocket 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889653/

相关文章:

node.js - 在嵌套的 MongoDB 调用中,如何确保原子性?

python - 找出消息中发送/接收的特定字节数。 (Python)

sockets - FTP 服务器如何恢复下载?

javascript - 需要将 var 设置为链接

javascript - 为什么这个 action.type 没有在我的 React/Redux 应用程序的 Reducer 中触发?

javascript - .css() Jquery 方法使整个文档不起作用

node.js - 如何将 process.stdin 的输入与字符串进行比较? Node.js

javascript - 有什么方法可以在node.js 的promise 中抛出错误吗?

Python 3 : UDP Packet send/receive in a Tkinter gui

javascript - react .js : arrays and "Critical assumptions about the merge functions have been violated" error