2009-06-12 62 views
3

我在javascript中創建一個塔防遊戲,並希望獲得高分和其他多人互動。可能有幾個玩家同時開始遊戲,並告訴他們其他人的進展速度和那種東西。Ajax高分安全

我不知道flash遊戲如何送他們的成績或事件,以確保每個客戶端發送的信息實際上是正確的,而不只是別人發送難以置信的成績。我記得幾年前,當Flash遊戲開始有很高的分數時,看到不真實(黑客攻擊)分數和很好的情況非常普遍......這很奇怪;那麼這裏的祕密是什麼?

回答

2

人們總是能夠在比賽中作弊......你能做的最好是讓人很難作弊。舊Flash遊戲的分數非常容易操縱,因爲分數將通過HTTP請求提交。嗅探流量會顯示提交網址和需要傳遞的變量以更新分數。我希望它已經改變了。

如果我是你,我會充分利用,將與最後的比分沿着爲了驗證分數是合法的傳遞一些錯誤校驗碼。錯誤檢查代碼算法應該難以根據分數確定(如果該人正在嗅探它)。 JavaScript也應該被任意混淆。這遠非理想,但它應該阻止很大一部分作弊者。

0

這些日子裏,它主要是默默無聞。您通常會爲每個遊戲分配一個唯一的標記,並且形成某種分數和標記的散列,並在提交時進行驗證(或者在整個遊戲過程中持續提交,驗證和令牌切換)。

對於你來說,通過javascript將會困難得多。

2

我見過的最佳做法是做健康檢查。

記錄經過的時間,殺死敵人,等...檢查與數據的得分,看看他們加起來。

0

使用以下工具,用於常用防止假冒成績和進展報告的組合。

  1. Obscurity - 壓縮和隱藏計算分數字符串的邏輯。分發它並使其難以進行逆向工程。
  2. 隨機改變鍵 - 當你的遊戲開始,讓JavaScript的請求,可用於加密包含高分串等服務器也應該有私鑰,這將使你對消息進行解密的密鑰。
  3. 完整性檢查 - 雖然用戶可能會改變分數,但是您的請求中也包含殺死數量等,這些是已知的界限。服務器將檢查散列並確保數據有效。
  4. 考慮使用彗星服務器 - 由於您將爲兩個客戶端提供實時數據,因此使用Comeb服務器(如Orbited或Jetty)會更好。這將啓用流式傳輸而不會導致服務器崩潰。
  5. 令人沮喪。 'nuff說。