Comment puis-je secure Socket.IO?

J'ai travaillé avec la Prise.IO pour quelques jours et il a été à la fois très excitant et encore plus frustrant. Le manque de documentation en cours/tutoriels a fait de l'apprentissage, il est très difficile. J'ai finalement réussi à créer une base de système de chat, mais il y a une flagrante de la question. Comment puis-je obtenir il?

Quel est l'arrêt à un utilisateur malveillant de la copie (ou modification) de mon code et de le connecter à mon serveur? Je peux récupérer le nom d'utilisateur de mon script PHP et de le soumettre à Douille.IO afin que je puisse les reconnaître en tant qu'utilisateur (et le PHP de sécurité bien sûr), mais quel est l'arrêt de quelqu'un à partir de proposer un nom d'utilisateur non enregistré?

Comment puis-je m'assurer que les événements proposés sont authentiques et n'ont pas été falsifiés?

Ma base de socket.io chat pour les références.

Serveur:

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--; });
});

Client:

    <?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>

Tout cela fonctionne dandy, sauf pour n'avoir absolument aucune sécurité.

  • Un point de départ -> github.com/LearnBoost/socket.io/wiki/Authorizing
  • pour ajouter à ce que @ManseUK dit, vous pouvez ensuite vérifier dans le rappel si le nom d'utilisateur est également connecté. Cela est essentiel pour prévenir un chat seul avec quelqu'un qui est réellement connecté.
  • Une autre option serait de s'authentifier en PHP à l'aide du nom d'utilisateur / mot de passe puis enregistrer un cookie, puis à l'intérieur de Node.js vérifier l'existence et le contenu du cookie
InformationsquelleAutor Ian | 2012-07-17