2017-02-27 49 views
0

我正在創建一個遊戲網站,當玩家完成遊戲時,我希望網站將分數更新到數據庫。現在我唯一的問題是,玩家可以通過在瀏覽器中使用JavaScript方法/代碼輕鬆地欺騙他們的分數。我怎樣才能做到這一點?如何防止用戶在JavaScript遊戲上非法獲得更高的分數?

+0

那麼你應該在將它放入數據庫之前對它進行清理...... –

+0

遊戲結束後立即將遊戲成績存儲在PHP變量中。無論存儲在JavaScript中什麼都可以忽略。 –

+5

[阻止Javascript遊戲調整/黑客]的可能重複(http://stackoverflow.com/questions/6320996/prevent-javascript-games-tweaking-hacking) – mickmackusa

回答

0

玩家可以通過在瀏覽器中使用javascript方法/代碼輕鬆地欺騙自己的分數。

混淆:如果你的目標是防止它發生容易,您可以obfuscate JavaScript代碼。 編輯:閱讀@mickmackusa's link後,IIFE是一種快速實現你要找的東西的方法。

簽名:如果您的目標是防止它發生,您應該考慮使用verifiable signature or hash。這個應用的JS越重,這個越難。例如,如果簽名是通過純JavaScript生成的客戶端,則代碼爲would still leak everything an attacker would need to fake the signature。公認的設計是將私有組件服務器端移動到可以受保護的位置。

混淆是非常有效的,只要反混淆的負擔遠遠大於攻擊者找出的獎勵(或風險)。

+0

所有我需要確保的是,分數發送到數據庫是正確的分數 – blendy

+0

儘量減少問題發生的方式不會影響最終解決方案。如果您需要保證真實性,請使用可驗證的不可更改的方法。如果你想過濾掉99%的黑客,使代碼變得混亂,甚至在你研究它後如何發送給後端,你也不明白。 – tresf

+0

假設問題主要發生在記分牌上的人詢問他們的姓名時,您也可以選擇爲數據庫中的每個分數使用唯一的ID,然後讓最終屏幕要求名稱簡單修改該記錄。這仍然不是萬無一失的,我建議你在會話中存儲某種形式的時間戳,以便有人不會將數據庫擦乾淨。但它仍然是一個糟糕的設計。如果你想保護它,你需要使用安全可靠的數據簽名方法。 – tresf