node.js - Socket.io ID 和用户信息安全
问题描述
我现在想做的是当用户离开大厅时,我想发出离开大厅的用户名,然后在大厅聊天室中显示该信息。这是当前的发射:
$("#lobby-leave-btn").on('click', () => {
socket.emit('lobby-left', {
username: username
});
});
问题是每个人都可以在控制台中设置他们想要的任何用户名,即使我在服务器端检查该用户名是否存在于数据库中,他们也可以键入不在大厅中的现有用户用户名。
有没有办法在不传递用户名的情况下做到这一点?更安全的方式?我可以进入socket.id
服务器端,但我又无法通过套接字 id 获取用户信息。任何帮助表示赞赏。
解决方案
如果您有用户名,那么您应该将它们存储在服务器端,我假设您正在这样做(在数据库中,或者在用户连接时存储在服务器上的内存中)。在这种情况下,一旦你知道用户是谁——也就是说,只要他们登录(如果你有登录系统)或连接到套接字——你应该将用户名存储为属性在服务器上的套接字本身上。然后任何传入的套接字数据都会自动附加用户名,因为它固有地连接到该套接字。
网络安全的信条是,如果你能提供帮助,你永远不应该相信用户提交的数据。所以你不应该让用户在没有某种验证的情况下在操作中识别自己。因此,在登录或连接时验证他们一次,然后将他们的身份存储在套接字上,不要让他们在想要进行更改时告诉你他们是谁。
推荐阅读
- spring-boot - 在我的应用程序为 SpringBoot 运行后,正在执行 H2 数据库的 data.sql 脚本
- python - 使用另一个数组在 Numpy ndarray 中选择某些索引
- react-native - 如何在本机反应中隐藏日期格式?
- javascript - D3 Sankey 节点宽度
- c# - 在临时 ASP.NET 文件夹中存储文件
- python - 为翻译聊天机器人安装 fastBPE 包时出错
- fortran - 使用 mpi subrouine 更改变量的值
- git - Git 别名文档
- html - 如何在 React 中绑定要在 html 中显示的值?
- java - 如何随机获取仅使用一个类的对象名称?