2017-06-15 5 views
0

Node.jsとsocket.ioで簡単なtchatアプリケーションを実現していて、オブジェクト全体のすべてのクライアントのソケットIDを共有するのが良い方法と考えられるのでしょうか?Socket.io - 「ソケットID」は合理的な情報と考えられますか?

私のユーザーのそれぞれがそのように表現され、説明するために:すべての私のクライアントのリストは、サーバconst usersList = [ {...}, {...}, ... ]

に保存されている

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

私のクライアントのすべてが接続されています誰が確認する必要があるので、このusersListはすべてのクライアントに共有する必要があります。

とクライアントの接続解除場合、すべてこの#IDが切断されたことを通知する必要があります:

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

だから私の質問は次のとおりです。セキュリティ上の問題があること、すべてのクライアントは、他のソケットIDを知っていますか?データを盗んだり、他のユーザーを匿名にしたりするような厄介なことをすることはできますか?あなたの助けのための

おかげ

答えて

1

一個の以上のソケットのsocket.id価値を共有するには、固有の、組み込みのセキュリティ上のリスクはありません。 socket.io自体には、クライアントが何かを行うためにsocket.idを使用するために使用できるAPIは含まれていません。したがって、クライアントは、それを知っていればsocket.idで何もできませんでした。

socket.idの値を引数として受け入れるsocket.ioメッセージのサポートを開始した場合、socket.idの値を渡すと、任意のクライアントがメッセージ内のsocket.idの値を使用できるようになります。それが問題を引き起こすかどうかは、自分の設計とサーバーが受け入れるメッセージに完全に依存します。そのユーザーのsocket.idを渡すだけで、システムからユーザーを削除するようにサーバーに指示するメッセージをサポートしているとします。次に、socket.idの値を渡すと、誰でも自分のサーバーメッセージを使用してそのユーザーをシステムから削除することができます。

したがって、socket.idの値には組み込みのリスクはありません。自分のサーバーがsocket.id値が与えられたときにダメージを与える可能性のある操作をサポートしていると、リスクが発生する可能性があります。サーバーをどのように設計したか、そして誰かがsocket.idを知っているときに悪意のある操作から保護しているかどうかは、まさにそのとおりです。

socket.idは、socket.ioサーバーの一時的なユーザー名のように考えることができます。ほとんどのシステムでは、一部のユーザのユーザ名だけがそれ自身ではセキュリティ上の問題を引き起こさないことを知っています。権限のないクライアントが特定のユーザー名を使用して問題を解決できる操作を公開した場合に限ります。 socket.idと同じです。それはちょうど一時的なユーザー名のようなものです。

+0

ありがとう@ jfriend00!これは完全に私の最初の質問に答える。 – jmpp

関連する問題