【问题标题】:Socket.io-auth - hide the credentials from payload requestSocket.io-auth - 隐藏有效载荷请求中的凭据
【发布时间】:2018-04-21 13:01:15
【问题描述】:

我正在使用 laravel 广播构建我的套接字应用程序。我制作了我的服务器脚本,然后像在这个脚本中一样添加了 https:(代码可能包含错误,因为它是从内存中写入的)

var fs = require('fs');
var https = require('https');

var express = require('express');
var app = express();

var options = {
  key: fs.readFileSync('./file.pem'),
  cert: fs.readFileSync('./file.crt')
};
var serverPort = 3000;

var server = https.createServer(options, app);
var io = require('socket.io')(server);

require('socketio-auth')(io, {
  authenticate: authenticate,
  postAuthenticate: postAuthenticate,
  disconnect: disconnect,
  timeout: 1000
});

之后,我添加了 socketio-auth 并将其修改为仅用于用户名和密码身份验证。

function authenticate(socket, data, callback) {
    if (data.username != "username") {
      return callback(new Error("User not found"));
    }
    return callback(null, user.password == "password");
  }
}

我的问题是关于我通过套接字发送的凭据。

import VueSocketio from 'vue-socket.io';

Vue.use(VueSocketio, socketio('https://socketserver.com:1923', {secure: true}));

var vm = new Vue({
  sockets:{
    connect: function(){
      console.log('socket connected')
      this.$socket.emit('authentication', {username : "username", password: "password"});
    },
  },
})

我实际上将 Vue 与 vue-socketio 一起使用,但它可以处理连接以及正确获取/发送信息。

我遇到的问题是,当我在谷歌浏览器中进行控制台时,我得到纯文本套接字发出身份验证信息,例如 (请求有效负载:{身份验证:{用户名:“用户名”,密码:“密码”}})。

当我使用 ssl 时这是正常的吗?我的代码有问题吗? 或者我需要自己加密然后解密这些信息?

我认为我通过 HTTPS 发送的所有内容都是加密的。

寻找你的重播。谢谢!

【问题讨论】:

    标签: php node.js sockets authentication encryption


    【解决方案1】:

    好吧,我自己做了加密器。 对于客户端,我使用数据发出加密信息,并使用 socket.id 验证哈希。

    对于服务器,我使用 socket.id 解密并检查 hmac 验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多