2016-12-18 24 views
0

我在使用套接字io的nodejs中構建了一個遊戲服務器。在http上使用套接字io,是否可以安全登錄?

我打算從身份驗證過程中刪除express和cookie,而是使用webstorage和試圖在套接字io握手期間登錄的客戶端。

但是,我正在使用http並以明文形式發送用戶標識和密碼。請,憐憫我!我相信在整個套接字連接中使用https會增加巨大的開銷,因爲更新每100ms發送一次。我目前的解決方案已經爲開發工作,但我相信它是不安全的。

我應該提到我從來沒有設置/使用https,所以糾正我,如果我錯了開銷,我知道這是一個非常激烈的話題。理想的解決方案似乎是通過https連接對用戶進行身份驗證,然後通過http傳輸遊戲狀態信息,但我不知道是否可以實現。

最後,我有2個用於登錄用戶的選項。我可以在服務器上允許套接字io連接,並只從客戶端發出登錄憑據。如果它們不正確,請斷開它們。 但是,更清晰的解決方案是在握手的http標頭中發送用戶標識和pw,然後從socket.io中間件對用戶進行身份驗證,但我不確定以這種方式發送數據是否安全。

我不認爲這是一個標準實踐不存在的小生境問題,但它可能只是使用https。我相信加密用戶憑證沒有好處,因爲數據仍然可以在客戶端和服務器之間窺探。我如何能做到這一點的任何信息表示讚賞, 或者只是點我朝着正確的方向:)

的登錄認證

回答

2

使用一個HTTPS連接,並回復給客戶具有獨特的安全令牌,如果用戶名/密碼已驗證。

在客戶端和服務器之間的其他對話框中使用普通的http連接。如果客戶端正在請求需要驗證的內容,請在對話框中包含安全令牌。如果您發現方便,您的客戶端可以將安全令牌存儲在cookie中,因爲令牌只能用於一個會話。

一旦客戶端註銷或在令牌空閒一段時間後,服務器清除會話令牌。

這對於中等安全性應用而言便宜且有效。這種方案的變化可以在許多應用中使用。這不是萬無一失的 - 一個數據包嗅探器可能能夠獲取傳輸中的安全令牌。

如果安全令牌是由客戶端IP地址和服務器時間戳的散列構成的,那麼服務器很容易驗證每條消息中的令牌,並且第三方非常難以劫持會話。

+0

謝謝你的迴應!它非常有意義。但是,唯一的敏感數據是以握手方式發送(un/pw)。我不認爲這個令牌會被使用,因爲我不打算對玩家所做的每一個動作進行認證。所以我可以使用簡單的摘要認證。因爲我會在handhsake之後通過http發送令牌,所以它同樣容易被窺探。 – MushyShaman

+0

@MushyShaman - 您可以在初始SSL連接上交換加密密鑰,然後使用它加密/解密未來非SSL消息的有效負載。不像SSL本身那樣安全,但可能會爲您使用。 – jfriend00

相關問題