首页 > 解决方案 > Socket.io ID 和用户信息安全

问题描述

我现在想做的是当用户离开大厅时,我想发出离开大厅的用户名,然后在大厅聊天室中显示该信息。这是当前的发射:

  $("#lobby-leave-btn").on('click', () => {
    socket.emit('lobby-left', {
      username: username
    });
  });

问题是每个人都可以在控制台中设置他们想要的任何用户名,即使我在服务器端检查该用户名是否存在于数据库中,他们也可以键入不在大厅中的现有用户用户名。

有没有办法在不传递用户名的情况下做到这一点?更安全的方式?我可以进入socket.id服务器端,但我又无法通过套接字 id 获取用户信息。任何帮助表示赞赏。

标签: node.jssocket.io

解决方案


如果您有用户名,那么您应该将它们存储在服务器端,我假设您正在这样做(在数据库中,或者在用户连接时存储在服务器上的内存中)。在这种情况下,一旦你知道用户是谁——也就是说,只要他们登录(如果你有登录系统)或连接到套接字——你应该将用户名存储为属性在服务器上的套接字本身上。然后任何传入的套接字数据都会自动附加用户名,因为它固有地连接到该套接字。

网络安全的信条是,如果你能提供帮助,你永远不应该相信用户提交的数据。所以你不应该让用户在没有某种验证的情况下在操作中识别自己。因此,在登录或连接时验证他们一次,然后将他们的身份存储在套接字上,不要让他们在想要进行更改时告诉你他们是谁。


推荐阅读