2017-03-04 48 views
1

我正在開發一個使用socket.io的web應用程序。 我目前使用的套接字ID作爲標識符獲取廣播到其他客戶端。現在這引發了安全問題,關於這個id是否可以用來劫持另一個用戶會話。不幸的是,要在網上找到任何信息是非常困難的。socket.io套接字ID應該是祕密的嗎?

所以 - 套接字ID應該保密還是我可以安全地使用它作爲公共標識符?

回答

3

客戶端無法直接對socket.id執行任何操作。因此,允許識別id本身並不會導致新的漏洞。但是,如果您的服務器允許在套接字上執行某些操作(如果只知道一個ID),那麼您必須評估服務器公開的操作的風險。由於您沒有向我們展示任何代碼或設計,因此我們無法真正評論這些內容。

例如,如果您的服務器支持「購買」消息,並且所需的全部內容都是客戶端觸發購買操作的ID,那麼如果您讓該ID公開,則可能會出現問題。但只要你的服務器提供給客戶端的唯一操作是用於公衆訪問任何套接字(比如向他們發送消息),那麼應該沒有問題。

所以 - 套接字ID應該保密還是可以安全地使用它作爲公共標識符?

它作爲一個公共標識符是非常好的,這是它在那裏的事情之一。它應該用作標識符(如「我想發送消息給Bob,以便告訴服務器向他的ID發送消息」),但不作爲授權。畢竟,如果你公開它,那麼它不是一個祕密,所以不應該被你自己的服務器API用來授權。

我想我應該更具體一些。我想知道是否有可能惡意用戶通過提供另一個套接字ID通過數據包僞造將其請求與外部套接字對象(我用作會話緩存)配對。我從你的回答中瞭解到情況並非如此 - 非常感謝!

socket.id在傳輸本身中並未被socket.io使用。所以你不能做任何惡意的事情,比如假裝成某個人,你不只是因爲你知道他們的socket.id。事實上,據我所知,客戶甚至不知道socket.id - 它在服務器實現中用於識別和查找特定客戶端。

+1

我想我應該更具體一些。我想知道是否有可能惡意用戶通過提供另一個套接字ID通過數據包僞造將其請求與外部套接字對象(我用作會話緩存)配對。我從你的回答中瞭解到情況並非如此 - 非常感謝! – cwry

相關問題