【问题标题】:socket.io: Is it safe to store sensitive data inside the handshake object?socket.io:在握手对象中存储敏感数据是否安全?
【发布时间】:2014-01-29 01:20:31
【问题描述】:

我想在握手对象中保存一些用户敏感数据。服务器端代码如下所示:

io.configure(function (){
 io.set('authorization', function (handshakeData, callback) {

   var objAuthorized = IsUserAuthorized(handshakeData);

   if (objAuthorized.authorized) {
        handshakeData.password = objAuthorized.password; // Store sensitive data inside handshake
        handshakeData.email = objAuthorized.email; // Store sensitive data inside handshake
        callback(null, true);
     } else {
        callback(null, false);
     }

  });
});

io.sockets.on('connection', function (socket) {
  socket.on('do something', function() {
     if DoSomething(socket.handshake.password, socket.handshake.email) {
        // do something here
     }
  });
});

上面的例子取自https://github.com/LearnBoost/socket.io/wiki/Authorizing

在握手对象中保存敏感数据是否安全?客户端能否在其套接字连接的生命周期内以某种方式修改这些数据?

谢谢

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    据了解,这没有任何问题,用户无法从socket.io 中的授权中获得特权.. 但它不被认为是这样做的好方法或好习惯。

    大多数开发人员不会这样做,他们在应用程序的其他部分处理身份验证/授权,并在 socket.io 上进行 cookie 和会话验证。这也将消除 socket.io 服务器上的开销。


    更新

    以下示例展示了如何使用会话 express/socket.io

    一些有用的链接:

    请注意,您必须以通用登录表单对用户进行身份验证,将凭据与数据库进行匹配,如果您以前使用过 PHP 和用户身份验证,则不会有问题。匹配用户凭据后,您设置了 sessionID 和任何其他数据,其余的由 express 处理。

    【讨论】:

    • 谢谢你的答案。您能否提供一个简单的示例,大多数开发人员如何处理身份验证/授权?
    • 好的。所以我想授权后在握手对象中存储敏感数据是安全的。
    • 很明显,如果你想,比方说,只为一个套接字的生命周期保存身份验证信息,然后让节点运行整个循环请求数据库会话,使用它并保存返回 - 效率非常低。
    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 2020-10-27
    • 1970-01-01
    • 2013-08-01
    • 2017-01-14
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多