Socket.io-“套接字ID”是否被视为敏感信息?

问题描述 投票:1回答:1

我正在用Node.js和socket.io实现一个简单的聊天应用程序,想知道是否在整个对象中共享所有客户端的套接字ID是否被认为是一种好习惯?

为了说明,我的每个用户都这样代表:

{
    nick       : 'John Doe',
    dateJoined : Date.now(),
    rank       : 0,
    id         : socket.id
}

我所有客户的列表都存储在服务器const usersList = [ {...}, {...}, ... ]

我所有的客户都需要查看谁已连接,因此usersList应该共享给所有客户。

如果客户端断开连接,则应通知所有人此#ID断开连接:

socket.on('userDisconnect', function(id) {
    clientSideList = clientSideList.filter( user => user.id !== id );
}

所以我的问题是:如果每个客户端都知道其他客户端的套接字ID,那是否是一个安全问题?他们会做出令人讨厌的事情,例如窃取数据或冒充其他用户吗?

感谢您的帮助

node.js sockets socket.io chat
1个回答
3
投票

共享一个或多个套接字的socket.id值没有固有的内置安全风险。 socket.io本身不包含客户端可以用来使用socket.id执行任何操作的任何API。因此,开箱即用,如果客户知道socket.id,就不会做任何事情。

现在,如果您开始支持接受socket.id值作为参数的socket.io消息,则传递socket.id值确实允许某些任意客户端在您的消息中使用这些socket.id值。是否导致问题完全取决于您自己的设计以及服务器接受的消息。假设您支持一条消息,告诉服务器仅通过向该用户传递该用户的socket.id将其从系统中删除。然后,如果您开始传递socket.id值,那么任何人都可以使用自己的服务器消息从系统中删除该用户。

因此,socket.id值没有内置风险。如果您自己的服务器支持给定socket.id值的操作可能会造成损害,则可能会有风险。因此,这完全取决于您如何设计服务器,以及在有人知道socket.id时是否防止恶意操作。

您可以将socket.id视为socket.io服务器上的临时用户名。在大多数系统中,仅知道某些用户的用户名本身不会引起安全问题。仅当公开操作后,未经授权的客户端才能将其定向到特定的用户名时,您才会遇到问题。与socket.id相同。就像一个临时用户名。

© www.soinside.com 2019 - 2024. All rights reserved.