2017-06-15 1 views
0

Je réalise une simple application de tchat avec Node.js et socket.io et je me demande si le partage des ID de socket de tous les clients dans Objects est considéré comme une bonne pratique?Socket.io - Est-ce que le "socket ID" est considéré comme une information sensible?

Pour expliquer, chacun de mes utilisateurs sont représentés si:

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

Une liste de tous mes clients sont stockées sur le serveur const usersList = [ {...}, {...}, ... ]

Tous mes clients a besoin de voir qui est connecté, cette usersList doit être partagé avec tous les clients.

Et si la déconnexion du client, tout doit être informé que ce #ID déconnecté:

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

Ma question est: est-ce un problème de sécurité si chaque client connaît l'ID de socket des autres? Pourraient-ils faire quelque chose de méchant comme voler des données ou désattribuer d'autres utilisateurs?

Merci pour votre aide

Répondre

1

Il n'y a pas inhérente, intégré risque de sécurité dans le partage de la valeur socket.id d'une ou plusieurs prises. socket.io lui-même ne contient aucune API qu'un client pourrait utiliser pour utiliser ce socket.id pour faire quoi que ce soit. Donc, hors de la boîte, aucun client ne pouvait faire quoi que ce soit avec un socket.id s'ils le savaient. Maintenant, si vous commencez à supporter les messages socket.io qui acceptent les valeurs socket.id comme arguments, le fait de passer autour des valeurs socket.id permet à un client arbitraire d'utiliser ces valeurs socket.id dans vos messages. Que cela cause ou non un problème dépend entièrement de votre propre conception et des messages acceptés par votre serveur. Supposons que vous souteniez un message qui indique au serveur de supprimer un utilisateur de votre système en lui passant simplement le socket.id de cet utilisateur. Ensuite, si vous commencez à transmettre des valeurs socket.id, cela permet à n'importe qui d'utiliser votre propre message de serveur pour supprimer cet utilisateur de votre système. Il n'y a donc pas de risque intégré avec socket.id. Il pourrait y avoir un risque si votre propre serveur supporte des opérations qui peuvent causer des dommages quand on lui donne une valeur socket.id. Donc, c'est totalement à la façon dont vous avez conçu votre serveur et si vous avez protégé contre les opérations malveillantes lorsque quelqu'un connaît un socket.id.

Vous pouvez penser à un socket.id comme un nom d'utilisateur temporaire sur le serveur socket.io. Dans la plupart des systèmes, connaître seulement le nom d'utilisateur d'un utilisateur ne cause pas, à lui seul, un problème de sécurité. Ce n'est que si vous exposez des opérations qu'un client non autorisé peut alors diriger à un nom d'utilisateur spécifique que vous avez un problème. Idem pour socket.id. C'est juste comme un nom d'utilisateur temporaire.

+0

Merci @ jfriend00! Cela répond parfaitement à ma question initiale. – jmpp