簡體   English   中英

HTML5游戲安全地連接到數據庫(由用戶停止手動JavaScript)

[英]HTML5 game connecting to database safely (stopping manual JavaScript by user)

我正在使用HTML,JQuery和PHP / MySQL。 我大部分時間都了解,如果我想確保此游戲的安全性,那么服務器實際上需要做所有事情,但是在某些情況下,游戲必須告訴服務器去做。 在我的情況下,這是一個RPG類型的設置,它有時需要通過Ajax調用將POST請求發送到PHP腳本,該Ajax調用會更新,插入或刪除數據庫。 例如,一名玩家贏得了一場戰斗,並且需要附加他的經驗值,或者玩家在戰斗中轉了一圈,並且需要計算從其他敵人身上奪走的生命值並返回並更新敵人的生命值。

可以說,當播放器單擊“攻擊”並運行一個名為playerMove('attack')的JavaScript函數時,阻止用戶進入其瀏覽器開發人員工具並手動運行該功能的原因是什么? 還是在備用服務器上使用類似的代碼,並在服務器上對相同的公共腳本運行跨站點Ajax調用?

有什么辦法可以解決這個問題? 即使我有一款作為客戶端應用程序制作的游戲(如C#或類似的應用程序)也不會存在這些問題,但是用戶很難執行這些問題。 否則,如果正確完成,直接通過C#連接到MySQL將最安全。 但是C#將POST請求發送到PHP腳本又如何呢?這不會使您回到一個問題,因為腳本是公共的,它們可以從其他來源發布到POST?

基本上,每次出現玩家“攻擊”請求時,服務器至少需要執行以下操作:

  • 對請求中的數據進行基本驗證。

  • 檢查目標玩家的攻擊請求是否實際上來自正確的帳戶。

  • 檢查玩家當前是否在戰斗中,輪到他,攻擊的目標是否有效,玩家沒有任何阻止攻擊的狀態效果等。任何規定該玩家現在不能攻擊的游戲邏輯。

  • 計算攻擊的影響。

  • 更新數據庫。

  • 將結果返回給客戶端。

  • 通過長時間輪詢,WebSocket等將結果返回給所有其他客戶端。

現在,如果播放器試圖在無法播放的時候進行AJAX調用,則服務器驗證應阻止該調用。 記住,客戶端是所有輸入/輸出,並且如果沒有在JS和PHP之間進行大量的代碼復制,就無法執行任何游戲邏輯。

用PHP開發游戲,尤其是多人游戲,需要大量的開銷和樣板。 老實說,我會考慮使用另一種語言/框架。 例如, Meteor為您提供了很多類似的東西。 客戶端,服務器和數據庫數據將自動同步。 它還具有延遲補償,因此客戶端可以運行服務器代碼以獲得預期的結果,然后在服務器最終響應時更新為實際結果。 這將使您的游戲感覺像是實時工作,同時仍然讓服務器在發生任何游戲邏輯時都擁有最后的發言權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM