Jak zabezpieczyć Socket.IO?

Pracuję z Socket.IO od kilku dni i było to niezwykle ekscytujące i jeszcze bardziej frustrujące. Brak aktualnej dokumentacji / samouczków sprawił, że nauka była bardzo trudna. W końcu udało mi się stworzyć podstawowy system czatu, ale jest jedno rażące pytanie. Jak go zabezpieczyć?

Co powstrzymuje złośliwego użytkownika przed kopiowaniem (lub edytowaniem) mojego kodu i łączeniem się z moim serwerem? Mogę pobrać nazwę użytkownika z mojego skryptu PHP i przesłać go do Socket.IO, dzięki czemu mogę rozpoznać go jako tego użytkownika (a PHP ma oczywiście bezpieczeństwo), ale co powstrzymuje kogoś przed wysłaniem niezarejestrowanej nazwy użytkownika?

Jak mogę się upewnić, że przesłane wydarzenia są autentyczne i nie zostały naruszone?

Mój podstawowy czat socket.io dla referencji.

Serwer:

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

Klient:

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

Wszystko działa elegancko, z wyjątkiem absolutnego braku bezpieczeństwa.

questionAnswers(2)

yourAnswerToTheQuestion