2017-06-15 44 views
0

我正在使用Node.js和socket.io實現一個簡單的tchat應用程序,並想知道在整個對象中共享所有客戶端的套接字ID是否被認爲是一種好的做法?Socket.io - 「套接字ID」是否被認爲是一個明智的信息?

要解釋,我的每一個用戶都表示這樣:

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

我所有的客戶的列表存儲在服務器const usersList = [ {...}, {...}, ... ]

我的客戶的所有需求,看看誰的連接上,所以這應該向所有客戶共享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.io服務器上想象一個socket.id像一個臨時用戶名。在大多數系統中,只知道某個用戶的用戶名本身不會導致安全問題。只有當您暴露未經授權的客戶端可以通過特定用戶名引導您的操作時,您纔會遇到問題。 socket.id也是如此。這就像一個臨時用戶名。

+0

謝謝@ jfriend00!這完全回答了我最初的問題。 – jmpp

相關問題