套接字io使用io.sockets.emit

时间:2017-10-20 10:00:48

标签: ios node.js sockets coffeescript

我是Socket io世界的新手,并且想知道他们是否存在安全问题:

我也在使用Coffeescript。

服务器。

io.sockets.emit('UserInfo', {player1: AllData1, player2: AllData2}) 

AllData1基本上是player1的敏感信息,而AllData2是player2的敏感信息。

客户端。

 myName = 'snugglePuff'

 socket.on('UserInfo', (data) ->
        if data.player1.name = myName
          alert(data.player1.secret)
      )

所以我的问题是:看到服务器正在广播到每个连接的套接字,会"播放器2"以某种方式使用他们的浏览器能够看到data.player1.secret?

2 个答案:

答案 0 :(得分:0)

是的,这是一个巨大的安全问题。

每个客户都可以看到您播放的任何内容。对于用户来说,在他们的页面版本上编辑脚本并刮除广播以获取额外的数据(例如这一点)将是微不足道的。

如果您必须发送敏感信息,请确保仅发送给其所有者。或者,不要发送任何敏感内容,并研究如何保留服务器端的所有敏感内容(例如,使用安全随机生成的ID来识别每个用户)。

答案 1 :(得分:0)

We have many way to send to clients

所以在你的代码中,player2可以看到player1.secret。

// sending to sender-client only
socket.emit('message', "this is a test");

// sending to all clients, include sender
io.emit('message', "this is a test");

// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");

// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');

// sending to all clients in 'game' room(channel), include sender
io.in('game').emit('message', 'cool game');

// sending to sender client, only if they are in 'game' room(channel)
socket.to('game').emit('message', 'enjoy the game');

// sending to all clients in namespace 'myNamespace', include sender
io.of('myNamespace').emit('message', 'gg');

// sending to individual socketid
socket.broadcast.to(socketid).emit('message', 'for your eyes only');