2013-04-28 60 views
8

我正在構建一個使用websockets的應用程序。我只打算允許經過身份驗證的用戶在登錄之後打開與服務器的websocket連接並獲得會話ID。打開websocket連接有哪些安全問題?

  1. 一次,我已經開始與經過認證的用戶一個WebSocket連接,目前的「頁面」,然後保存打開的WebSocket連接的詳細信息。在這一點上,這個連接相對安全嗎?還是應該真的在我自己的應用程序級別協議中通過websocket發送的每條消息上檢查一些令牌?

  2. 存在任何已知的跨站點僞造型安全問題?在哪裏有人可以通過讓認證的用戶以某種方式執行一些JavaScript來合作打開websocket - 從而導致利用打開的websocket連接的能力?

回答

4

1)當您在服務器端使其安全時,連接是安全的。所以你必須通過WebSockets發送會話ID,在服務器端驗證它是否正確,並將連接標記爲有效。 HTTP的身份驗證比較困難,因爲HTTP是無狀態的(與原始TCP不同)。當然,它仍然有可能劫持TCP連接,但它不是那麼容易(見例如this article),如果它發生了,再沒有什麼(除了TLS)可以幫助你。

2)好吧,如果你換用那種匿名函數的WebSocket連接:

(function() { 
    var ws = new WebSocket("ws://localhost:1000"); 
    // some other stuff 
})(); 

那麼沒有外部JavaScript就能夠訪問它,所以你不必擔心。

+1

對於以上#1 - 是的,我檢查原握手cookie的,因爲它是一個HTTP GET請求建立連接。 Cookie必須通過先前的身份驗證才能擁有有效的會話ID。因此,我正在安全地授予連接權限......目前尚不清楚此連接處於開放狀態並且不驗證每條消息時可能存在哪些漏洞... – Rocketman 2013-04-29 00:01:11