0

我想知道是否有可能在清單文件或其他地方指定屬性,並禁用在我的應用程序的窗口中使用JavaScript控制檯。禁用javascript控制檯將不允許用戶簡單地給自己的錢,他們將被迫正確地玩遊戲。有誰知道是否有可能在應用程序中禁用JavaScript控制檯?它會在未來的Chrome版本中出現嗎?在我的chrome webstore應用程序中禁用檢查元素/ javascript控制檯?

+0

它永遠不會發生,而是封裝你的代碼(儘可能多),所以它更難以讓用戶搞砸你不想讓他們搞砸的東西。 – megawac

+0

如何控制「上下文菜單」? –

回答

6

與打開的網頁或正在處理的未打包應用程序相比,打包應用程序中的控制檯訪問權限已經減少。鼠標上下文菜單不會提供輸入開發人員工具,並且chrome菜單在應用程序中不存在。唯一的選擇來自Chrome:擴展程序頁面或Chrome Apps開發人員工具。

有動機的用戶將有其他幾條路線,包括修改客戶端的源代碼。使用JavaScript混淆器進行處理會稍微困難一些。

如果您必須保護遊戲邏輯以防止作弊,您需要從驗證玩家操作的服務器執行此操作。這也可以脫機工作,通過緩存遊戲操作並在可能時發送驗證。但是,這到底關係到什麼?如果是單人遊戲,則不會太多。如果有排行榜,讓他們成爲社交排行榜,這樣欺騙者只會欺騙他們的朋友。如果它完全是多人遊戲,那麼你必須驗證。 ;)永遠不要相信客戶。

1

你需要使用閉包,然後你可以保護他們不應該修改的代碼部分。例如,假設你有一個遊戲,他們回答一個簡單的數學問題來獲取金錢,當他們有足夠的錢,我們會說1000美元,他們可以買一把槍。你不想讓他們能夠只爲他們的賬戶增加資金,但他們應該能夠回答問題以獲得收益。你只露出getMoney功能,以及其他隱藏的一切,就像這樣:

var game = function() { 
    var money = 0; 
    var hasGun = false; 

    var getMoney = function() { 
     response = prompt("What is 2+2?"); 
     if (response == 4) money += 100; 
     alert("You have $" + money); 
    } 
    var showMoney = function() { 
     console.log(money); 
    } 
    var buyGun = function() { 
     if (money >= 1000) { 
      hasGun = true; 
      money -= 1000; 
      alert("You bought a gun!") 
     } 
     else alert("Not enough money!") 

    } 
    //we'll use this to expose methods and variables. 
    var public = 
    { 
     getMoney: getMoney, 
     buyGun: buyGun, 
     showMoney: showMoney 
    } 
    return public; 
}() 
game.getMoney(); 

他們可以從控制檯的暴露功能中訪問的唯一的事情就是問法和showMoney方法。獲得更多錢的唯一方法是通過詢問方法來完成。即使在控制檯中,他們寫道:

game.money = 1000; 
game.showMoney(); //returns 0; 
game.hackForMoney = function() { money = 1000; } 
game.hackForMoney(); 
game.showMoney(); //returns 0; 
game.showMoney = function() { return 1000; } 
game.buyGun(); //alerts "Not enough money!" 

現在有人可以訪問控制檯,這沒關係。

+0

這只是答案的一半。你還需要限制它們通過使它們只讀屬性來重新定義遊戲的所有屬性(以及遊戲本身,它實際上是'window.game')。看到這裏:http://stackoverflow.com/questions/366047/can-read-only-properties-be-implemented-in-pure-javascript/366086#366086 –

相關問題