如何安全Socket.IO?(How do I secure Socket.IO?)

2019-06-26 08:31发布

我一直在与Socket.IO了几天,它一直都非常令人兴奋,甚至更令人沮丧。 由于缺乏最新文档/教程已经使学习变得非常困难。 我终于成功地创建一个基本的聊天系统,但有一个明显的问题。 我该如何保护呢?

是什么阻止抄袭(或编辑)我的代码,并连接到我的服务器恶意用户? 我可以从我的PHP脚本抢的用户名,并提交给Socket.IO这样我就可以把它们识别为用户(和PHP当然有安全性),但什么阻止从刚刚提交未注册的用户名谁?

我怎样才能确保提交的事件是真实的,并没有被篡改?

我的基本socket.io聊引用。

服务器:

var io = require('socket.io').listen(8080);
var connectCounter = 0;
io.sockets.on('connection', function (socket) {
connectCounter++;
 console.log('People online: ', connectCounter);

socket.on('set username', function(username) {
socket.set('username', username, function() {
console.log('Connect', username);

    });
});
socket.on('emit_msg', function (msg) {
    // Get the variable 'username'

socket.get('username', function (err, username) {
      console.log('Chat message by', username);
      io.sockets.volatile.emit( 'broadcast_msg' , username + ': ' + msg );
    });

  });

socket.on('disconnect', function() { connectCounter--; });
});

客户:

    <?php session_start() ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>untitled</title>
</head>
<body>
<input id='message' type='text'>
<div id="content"></div>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-latest.js"></script>

<script>
  var socket = io.connect('http://localhost:8080');
$.ajax({
type: 'GET',
  url: 'https://mysite.com/execs/login.php?login_check=true',
  dataType: 'json',
   success: function(data) {
var username = data.username;
socket.emit('set username', username, function (data){
});

}
});

  socket.on('broadcast_msg', function (data) {
        console.log('Get broadcasted msg:', data);
        var msg = '<li>' + data + '</li>';
        $('#content').append(msg);
      });


$('#message').keydown(function(e) {
if(e.keyCode == 13) {
e.stopPropagation();
          var txt = $(this).val();
          $(this).val('');
          socket.emit('emit_msg', txt, function (data){
            console.log('Emit Broadcast msg', data);
          });
}
});
</script>
</body>
</html>

它所有的工作花花公子,但带有绝对没有安全。

Answer 1:

如果你可以安装一个key-value存储喜欢的Redis的节点服务器上,您可以使用Redis的客户喜欢你的PHP服务器远程访问它Predis 。 所有你所要做的就是更新节点服务器上的远程会话存储在一个新的登录/注销在你的PHP服务器发生。

检查这个职位的详细信息: 验证用户的socket.io/nodejs



Answer 2:

快递出色的护照框架使用安全cookie来验证身份。 甚至有一个模块从socket.io访问它。



文章来源: How do I secure Socket.IO?