2012-09-19 99 views
5

所以我正在用JavaScript編寫遊戲,最大的問題是誰玩的人誰可能有一個JS的體面知識可以打開我的源代碼,弄清楚它是如何工作的,然後將game.score = 100000000000000;插入控制檯。但是,似乎除了混淆腳本之外,將所有內容都包含在匿名函數中也是有用的。防止用戶執行代碼

(function() { 
    game_start = function() { 
     //etc 
    } 
    //etc 
})(); 

當我嘗試和運行任何從Chrome控制檯的代碼,它undefined出現。這是期望的結果,但是有沒有辦法繞過我的方法來使它無用?或者甚至有更好的方法來阻止事情從控制檯運行?

+4

客戶端代碼可以*永遠不會*真正不可破壞。 –

+4

你可以在chrome中添加一個斷點並改變任何你想要的。不要爲此付出太多的努力。最好的辦法是混淆/最小化代碼,這樣很難閱讀。看看類似uglifyjs –

+0

請參閱http://stackoverflow.com/a/11960187/453277 –

回答

4

沒有辦法確保這個人不會作弊。即使使用了嚴重混淆的代碼(我正在談論諸如H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa)之類的東西),您仍然可以觀看UI更改或網絡請求並從此處進行跟蹤。

有些人使用AJAX調用來驗證分數,例如,每次分數增加/減少時,應用程序都會向後端發出AJAX呼叫,並且您也會跟蹤後端的分數。當用戶提交最後的分數時,你會根據後端分數來檢查它,如果它不同,那麼你就會知道這個人在作弊。

但是,這不會阻止人們編寫腳本,使這些ajax調用,並以這種方式使得它的分數有效。

tl; dr:不,沒有辦法確保用戶端代碼不會受到影響。

+0

聽起來像一個有趣的解決方案。 – Polyov

3

對不起,但沒有辦法真正防止用戶在他的機器上運行遊戲時作弊。任何在用戶機器上運行的代碼都可以由用戶操縱。當你想使它無法作弊時,你必須在服務器上實現所有的遊戲邏輯,不要發送任何玩家不應該知道的信息,也不要接受玩家不允許的任何命令做。

+0

或者,至少該遊戲邏輯需要在服務器端進行驗證。 – Brad

+0

我知道防止作弊是不可能的,我只是想知道我能創造多大的障礙。 – Polyov