2013-01-20 41 views
1

我使用eclipse製作了一款遊戲。我有一個服務器程序和一個客戶端程序。客戶端使用套接字與服務器進行通信。如果客戶端啓動,則將其用戶名和密碼發送到服務器。如果組合存在,則客戶端可以與服務器進行通信。客戶不斷閱讀遊戲中其他人的等級並不斷髮送自己的等級。獲得多人遊戲的安全性

我的問題: 我如何確保密碼或者它已經安全? 客戶端不僅可以製作自己的java程序,而且可以使用現有的用戶名和密碼與服務器進行通信,而不是發送例如他已達到100級的程序。如果是的話如何解決這個問題? 我還需要保護其他任何東西嗎?

回答

4

保持服務器程序中的敏感狀態並讓客戶端請求當前值。然後你在服務器上控制它。

如果某人擁有有效的憑證,那麼他們能夠執行任何您的協議允許用戶在其上下文中執行的操作。這是您必須從服務器程序控制的內容,以防止客戶意外操作影響整體完整性。

+0

好吧,我可以知道客戶端程序是否是我製作的原始程序? – emillio5

+0

您需要爲此介紹一些密碼握手。例如,當客戶端第一次連接時,您可以傳回與客戶端計算機綁定的唯一哈希。 Yhen使用它來驗證應用程序。 – Pekka

1

......我可以知道客戶端程序是否是我製作的原始程序?

不,您不能......除非您控制安裝和運行客戶端程序的執行平臺。

但是,如果採取Pekka推薦的方法,那並不重要。具體而言,如果重要狀態和在該狀態下執行的操作由服務器端處理,那麼您可以以這樣的方式實現它,以至於用戶是否已經入侵客戶端並不重要。

實際上,很多遊戲的交互性取決於狀態和UI之間的快速交互。除非你可以緩解這種情況,否則將狀態置於另一個系統上會導致「滯後」問題。

+0

所以你所說的是,需要在遊戲中爲每個人做的所有計算都需要在服務器上完成。我想如果我想這樣做,我將需要我龐大的服務器或不? – emillio5

+0

@ emillio5 - 你不需要在服務器上做所有的計算。只有那些從公平競爭的角度來看是重要的。但是:是的,如果你想100%保證人們不會被客戶黑客入侵,那麼成本就會成爲服務器端資源來運行遊戲。 –

+0

@ emillio5 - 如果您有多個併發玩家,並且每個玩家都可以總結其他玩家的計算結果,那麼服務器通過更簡單的投票方法可以批准單個更新。這樣,同伴玩家就可以執行驗證,並且只有當所有玩家都遭到破壞時纔會出現問題。 – Pekka

1

如果它是服務器驅動的多玩家遊戲,您可以設計客戶端應用程序以請求服務器發回服務器唯一可解密級別密鑰和客戶端可讀級別編號或密鑰。並且在下一級別更改請求中,使客戶端根據需要發送先前接收到的級別密鑰(即當前)和任何其他參數以識別客戶端的會話狀態。

使用這種服務器唯一可解密的級別密鑰,客戶端無法修改它並請求跳轉游戲級別。 服務器反過來,將發回與下一級密鑰和其他相關信息給客戶端繼續。

儘管可能存在許多活動的客戶端會話,但要驗證和驗證它們,應該在服務器上存在此類服務。