我是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?
答案 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');