【问题标题】:Node.js/socket.io design confusionNode.js/socket.io 设计混乱
【发布时间】:2025-11-28 19:10:01
【问题描述】:

我想知道我是否以正确的方式做事

我的系统中有一个通知系统,我已通过以下方式实现。

服务器:

 socket.on('do_activity',function(packet){
 io.emit("notification_found_"+packet.receiver_id,packet);
});

客户:

socket.on("notification_found_10",function(){
 //do some action
});

注意:服务器会通知用户有关用户发现的某些活动。数据包变量包含目标用户 ID,(在我的例子中是 10)。

服务器监听do_activity事件监听器并向客户端发出notification_found事件

问题:

  • 1) 服务器将“notification_found_<user i>”事件传播给 每个用户都带有用户的后缀 ID。这是正确的方法吗 实施通知系统?
  • 2) 由于来自浏览器的任何恶意用户都可以发出 do_activity 事件,如何保护它?

非常感谢任何形式的帮助。

【问题讨论】:

  • 具体在哪里实施?在启动操作时,一个客户知道另一个客户的哪些信息?如果您可以使用一些任意信息来编码您的receiver_id,则可以使其更安全。比如用户名,或者其他比数字更难猜的东西。如果它是在需要访问权限的站点的安全部分实施的,那么也可以减少担忧。更多信息会有所帮助。
  • 我对用户 ID 进行编码。但我问这是将事件传播给特定用户的正确方法吗?
  • 我明白了,我在看你上面问的第 2 点,“如何保护它?”同样,我认为信息太少,无法很好地回答这个问题。你的receiver_id 是socket.id 吗?
  • 不,它是一个数字用户 ID。我的客户端基本上是用PHP开发的
  • 向所有用户发送只针对一个用户的消息然后让用户过滤它们是没有意义的。您应该只将消息发送给它所针对的用户。

标签: javascript node.js socket.io real-time


【解决方案1】:

作为上面发布的评论者,如果通知仅针对子组/个人,则向所有用户发送通知是没有意义的。

我建议您查看房间和命名空间,以隔离此类通知的分布。从documentation 本身检查这一点。

【讨论】: