Wie sichere ich Socket.IO?

Ich arbeite seit ein paar Tagen mit Socket.IO und es war sowohl extrem aufregend als auch noch frustrierender. Das Fehlen aktueller Dokumentationen / Tutorials hat das Lernen sehr erschwert. Ich habe es endlich geschafft, ein einfaches Chat-System zu erstellen, aber es gibt eine eklatante Frage. Wie sichere ich es?

Was hindert einen böswilligen Benutzer daran, meinen Code zu kopieren (oder zu bearbeiten) und eine Verbindung zu meinem Server herzustellen? Ich kann den Benutzernamen aus meinem PHP-Skript holen und an Socket.IO senden, damit ich ihn als diesen Benutzer erkennen kann (und der PHP hat natürlich Sicherheit), aber was hindert jemanden daran, nur einen nicht registrierten Benutzernamen zu senden?

Wie kann ich sicherstellen, dass die eingereichten Ereignisse authentisch sind und nicht manipuliert wurden?

Mein grundlegender socket.io-Chat für Referenzen.

Server:

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>

Es funktioniert alles einwandfrei, außer, dass es absolut keine Sicherheit gibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage