【问题标题】:socket.io - Client-Side Securitysocket.io - 客户端安全
【发布时间】:2018-11-27 11:03:33
【问题描述】:

我有一个关于 websocket 安全性的问题。例如,使用 socket.io/express/passport 进行聊天功能进行身份验证。像这样:

socket.emit('chatMessage', {
    msg: $('#m').val(),
    userid: '{{user.id}}'
});

这安全吗?有人可以在发送消息时伪造自己的身份吗?如果是这样,有什么更好的方法来解决这个问题。谢谢!

【问题讨论】:

  • 你不能相信来自客户端的任何东西。

标签: node.js express websocket socket.io passport.js


【解决方案1】:

你使用nodejs socket.io,你可以在nodejs中安装cors,然后导入cors var cors = require('cors');

你看:https://hoanguyenit.com/huong-dan-ket-hop-nodejs-vuejs.html https://hoanguyenit.com/chat-nodejs-vuejs.html

【讨论】:

  • 欢迎使用 Stack Overflow!如果您可以用英文引用替换您的链接,那就太好了,因为该门户网站对所有用户都使用英文。谢谢!
【解决方案2】:

这种方式不安全,除非他发送的是你提供的令牌。

最好的方法是在用户连接到服务器时对用户进行一次身份验证,而不是在每个.emit 上发送凭据

io.use(async(socket, next) => {

    try {
        // Use cookies, or query with a token provided 
        // by oAUTH or any kind of authentication method, or whatever method you whish
        await authenticate(socket); 

        return next();

    } catch(err) {

        return next(new Error('Authentication error'));
    }

});

io.on('connection', socket => /* ... */);

如果 auhtentication 有效,则每个 emit 都来自经过身份验证的套接字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多