2017-06-15 17 views
0

我正在使用Node.js和socket.io实现一个简单的tchat应用程序,并想知道在整个对象中共享所有客户端的套接字ID是否被认为是一种好的做法?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?他们可以做出一些令人讨厌的东西,比如数据停止或者未加载其他用户吗?

感谢您的帮助

回答

1

没有固有的,内置的安全风险共享一个或多个插座的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.io服务器上想象一个socket.id像一个临时用户名。在大多数系统中,只知道某个用户的用户名本身不会导致安全问题。只有当您暴露未经授权的客户端可以通过特定用户名引导您的操作时,您才会遇到问题。 socket.id也是如此。这就像一个临时用户名。

+0

谢谢@ jfriend00!这完全回答了我最初的问题。 – jmpp

相关问题