2017-06-15 2 views
0

Ich realisiere eine einfache Tchat-Anwendung mit Node.js und socket.io und frage mich, ob die gemeinsame Nutzung der Socket-IDs aller Clients in Objects als eine gute Praxis angesehen wird?Socket.io - Wird die Socket-ID als sinnvolle Information angesehen?

Um zu erklären, jeder meiner Benutzer sind so dargestellt:

{ 
    nick  : 'John Doe', 
    dateJoined : Date.now(), 
    rank  : 0, 
    id   : socket.id 
} 

Eine Liste aller meiner Kunden auf dem Server const usersList = [ {...}, {...}, ... ]

Alle meine Kunden gespeichert ist, muss sehen, wer verbunden ist, so dass diese usersList sollte für alle Clients freigegeben werden.

Und wenn ein Client trennen, alles, was diese #ID getrennt benachrichtigt werden soll: Meine Frage ist

socket.on('userDisconnect', function(id) { 
    clientSideList = clientSideList.filter(user => user.id !== id); 
} 

Also: ist, dass ein Sicherheitsproblem, wenn jeder Kunde des Socket-ID des andere weiß? Könnten sie etwas Fieses wie Stol-Daten machen oder andere Benutzer entlarven?

Danke für Ihre Hilfe

Antwort

1

Es gibt keine inhärenten, integriertes Sicherheitsrisiko in den socket.id Wert von einem oder mehreren Sockeln teilen. socket.io selbst enthält keine APIs, die ein Client verwenden könnte, um das socket.id zu verwenden, um irgendetwas zu tun. So konnte kein Client mit einem socket.id etwas anfangen, wenn er es wusste.

Wenn Sie jetzt damit beginnen, socket.io-Nachrichten zu unterstützen, die socket.id-Werte als Argumente akzeptieren, ermöglicht es die Weitergabe von socket.id-Werten einigen willkürlichen Clients, diese socket.id-Werte in Ihren Nachrichten zu verwenden. Ob dies ein Problem verursacht oder nicht, hängt vollständig von Ihrem eigenen Design und den von Ihrem Server akzeptierten Nachrichten ab. Angenommen, Sie unterstützen eine Nachricht, die den Server anweist, einen Benutzer von Ihrem System zu entfernen, indem Sie ihm einfach die socket.id dieses Benutzers übergeben. Wenn Sie dann beginnen, socket.id Werte zu übergeben, dann kann jeder Benutzer Ihre eigene Server-Nachricht verwenden, um diesen Benutzer von Ihrem System zu entfernen.

Also gibt es kein integriertes Risiko mit socket.id Werten. Es könnte ein Risiko bestehen, wenn Ihr eigener Server Operationen unterstützt, die Schaden anrichten können, wenn Sie einen socket.id-Wert erhalten. Das hängt also ganz davon ab, wie Sie Ihren Server entworfen haben und ob Sie vor böswilligen Vorgängen geschützt sind, wenn jemand eine socket.id kennt.

Sie können sich eine socket.id wie einen temporären Benutzernamen auf dem socket.io-Server vorstellen. In den meisten Systemen verursacht die Kenntnis nur des Benutzernamens eines Benutzers an sich kein Sicherheitsproblem. Nur wenn Sie Operationen offen legen, kann ein nicht autorisierter Client dann auf einen bestimmten Benutzernamen verweisen, bei dem ein Problem auftritt. Das Gleiche gilt für socket.id. Es ist wie ein temporärer Benutzername.

+0

Vielen Dank @ jfriend00! Das beantwortet meine erste Frage perfekt. – jmpp

Verwandte Themen