Node.js 库“Socket.IO”中“房间”的安全性

Posted

技术标签:

【中文标题】Node.js 库“Socket.IO”中“房间”的安全性【英文标题】:Security of "Rooms" in the Node.js library "Socket.IO" 【发布时间】:2021-12-21 00:05:25 【问题描述】:

我们正在考虑使用 Node.js 库“Socket.IO”中的“Rooms”开发应用程序。

当有多个房间时 分配 ID 以标识套接字所属的房间,但我们认为存在通过“会话劫持”和通信被劫持等方法泄露 ID 的危险。

有没有办法在确保安全的同时使用“房间”?

参考网址 https://socket.io/docs/v3/rooms/

【问题讨论】:

【参考方案1】:

房间是一种仅限服务器的数据结构。客户无权访问房间的概念。没有多少会话劫持可以让任何客户直接访问房间。

因此,您的服务器控制对房间的所有访问。数据仅存在于服务器的内存中。该数据的安全性将完全取决于您的服务器的安全性。

现在,您的服务器可能会访问房间以响应来自您的客户端的消息,因此您必须对来自客户端的命令进行安全可靠的设计。由于您根本没有提供任何相关信息,我们无法对此发表评论,但这确实与房间概念无关 - 这是您应用设计的基本安全性。


注意:给定套接字的内部 socket.id 是客户端自己知道的 - 换句话说,它知道自己的 socket.id。 socket.io 不会与任何其他客户端共享其他客户端的 ID。但是,即使其他人会以某种方式窃取该 socket.id,他们也无法通过 socket.io 对它进行本地处理,因为根本没有 socket.io 客户端直接访问房间,即使您有一个 socket.id。

【讨论】:

以上是关于Node.js 库“Socket.IO”中“房间”的安全性的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 手动将用户添加到房间(node.js)

socket.io 中最大同时打开的房间

node.js socket.io 应用程序 - 如何将某人踢出聊天室?

Socket.io广播到房间不工作

Socket.io 广播到房间不工作

Socket.io 中的动态房间