如何保护Socket.IO?

我一直在与Socket.IO工作几天,这是非常令人兴奋,更令人沮丧的。 缺乏当前的文档/教程使得学习非常困难。 我终于成功地创build了一个基本的聊天系统,但有一个明显的问题。 我如何保护它?

什么阻止恶意用户复制(或编辑)我的代码并连接到我的服务器? 我可以从我的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> 

除了绝对没有安全因素之外,这一切都很好用。

如果您可以在您的节点服务器上安装像Redis这样的键值存储,则可以使用Predis等Redis客户端从您的php服务器远程访问它。 所有你需要做的是当你的php服务器发生新的login/注销时,更新节点服务器上的远程会话存储。

检查这个post的细节: validation用户的socket.io/nodejs

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