2014-02-18 45 views
0

因此,我正在研究製作圖形聊天應用程序/網站(用戶坐在房間裏的2D頭像和聊天中)以及我迄今爲止所做的所有研究(很多!),一個LAMP堆棧似乎適合我的大部分站點,一些node.js和websocket協議用於處理髮送的實際聊天數據(用戶消息等)。我對創建這個範圍的任何東西都不是很有經驗(我更習慣於前端工作),但到目前爲止這是一個有趣的挑戰!帶有共享會話和用戶身份驗證的WebSockets和HTTP安全

我的問題是,我似乎無法找到關於驗證用戶信息的大量信息。我已經讀過,websocket本質上是相當不安全的,並且驗證發送的數據的來源是很好的...

不過,我關心的是用戶的實際身份。如果我使用Javascript來啓動套接字連接,我該如何防止用戶「欺騙」任何信息?是否有可能將用戶的PHP會話數據連接到處理websocket連接的服務器,以便Javascript不會處理除真實消息文本之外的任何內容?

例如,如果我以「Kris」身份登錄併發送消息「Hello!」或者改變了我的頭像圖片,我只想讓客戶端處理「Hello」或者頭像圖片的URL,並且保留所有其他信息在服務器端來回傳遞,如用戶名,以防止任何人搞亂了客戶端代碼。

回答

3

問題是要廣泛,除了缺乏知識和經驗外,不要觸及任何特定的挑戰。

雖然我仍然會在某些方面可能對您有用評論:

  1. WebSockets的安全性是一樣的HTTP請求的安全性 - 它是由您的應用程序。
  2. 粘滯會話需要識別並持續來自不同進程/服務器的會話。如果你決定使用LAMP(我建議不要),那麼你確實需要在PHP和node.js進程之間進行粘性會話。
  3. 連接期間的WebSockets(握手)使用一些額外的普通Cookie數據執行正常的HTTP請求。這可以在服務器端用於恢復會話並將客戶端套接字關聯到該會話。一旦套接字斷開,它將不得不放棄這種關係。
  4. 使用HTTP請求或WebSockets恢復會話在安全性方面幾乎完全相同,因爲WebSockets實際上是在會話恢復後發生的。
  5. 多個技術堆棧可能會導致代理node.js通過Apache從同一個域工作的複雜性。對於你所描述的應用程序,我不認爲需要這個老派+現代的堆棧混合。你可以在前面用nginx純粹使用node.js來提供靜態文件。這將更容易處理,而且您的代碼語言在項目中更持久,並且易於維護。
  6. 使用node.js創建RESTful更容易,因此它再次節省了時間。如果您願意,RESTful API背後的實際邏輯可以由您的node.js直接重用以獲取socket.io的數據。
  7. 您需要服務器<>客戶在通信方面的權威政治。客戶端只是「詢問」,服務器根據它認爲正確或錯誤做出決定。這應該是安全性方面的第一條規則。如果客戶會做出允許他人破解和作弊的決定。

再次 - 這是太寬泛了,非常「討論」式的問題,而不是一個具體的挑戰。

+0

很好的答案。在現代瀏覽器中,您不應該對HTTP身份驗證(例如HTTP Basic)的支持有限。意味着您需要在Web套接字層上實現一些身份驗證邏輯。 – bodokaiser

+0

我使用它來避免在WebSockets上進行任何身份驗證,並且在HTTP上使用一些OAuth或類似技術進行身份驗證 - 創建會話用戶後,只有在WebSockets進行連接後,纔會恢復會話並檢查您是否是經過身份驗證 - 如果不是,斷開連接,如果是 - 很好,您很安全。 – moka

+0

聰明的解決方法!我個人試圖避免狀態服務器端,但好主意:) – bodokaiser