2012-02-11 69 views
1

在javascript寫了一個服務器 - 客戶端應用程序/ HTML5它應該允許客戶端通信/服務器端使用Node.js的實時玩遊戲。我如何保存未經授權的操作在JavaScript

我知道使用私有變量等。但如何防止整個遊戲引擎通過控制檯API進行未經授權的訪問?

,如如何寫這樣的方式,所有的變量落入私人範圍,一旦開始運行,他們幾乎沒有單獨在全球範圍內註冊一個變量,因此,沒有人能惹的遊戲了!

從我的研究,我可以做這樣的事情

function Game(){ 
    // All declarations here 
    // Start a logic in here 
} 

,然後調用它

new Game(); 

將做到這一點?但有沒有更好的方法來做同樣的事情?

回答

2

你可以不註冊任何單變量運行JavaScript的應用程序,通過一個匿名函數:

(function() { 
    //local variables here. 
})(); 

然而,有防止作弊沒有可靠的方法:人們可以輕鬆地分析你的代碼,並創建假的AJAX請求。使用最新的瀏覽器,捕獲代碼非常容易。

隨着getter和setter方法,任何人都可以有效地攔截你的函數。使用已棄用的arguments.callee.caller屬性,攻擊者可以讀取函數調用的來源,從而有效訪問此答案頂部定義的閉包。

例子:

var _alert = alert; 
window.alert = null; 
Object.defineProperty(window, 'alert', { 
    'value': function(m) { 
     console.log('Intercepted. Function source: ' + arguments.callee.caller); 
     _alert.call(this, m); 
    } 
}); 
(function(){ 
    var localVar = 'secret'; 
    alert('Hi!'); 
})(); 
+0

,所以我做的事情是這樣的最安全的..我也可以從服務器端編寫一個基於MD5令牌系統,使AJAX請求變得很難複製,比方說服務器爲每個數據包提供一個md5,這個md5必須發送回服務器以便下一次調用。因爲所有數據包都可以在私有範圍內工作,所以沒有人可以訪問md5哈希[希望],因此我們添加一層安全:) – ShrekOverflow 2012-02-11 13:46:59

+2

@Ahhhhhhh在我的例子中,我攔截了一個相對無害的方法。但是,通過'XMLHttpRequest'對象,可以使用相同的技術來攔截AJAX調用。即使那些沒有JavaScript **知識的人也可以使用Firebug,開發者工具,HttpFox和類似工具讀取HTTP請求。如果您構建JavaScript遊戲,則默認情況下您不應該信任這些請求。最好的辦法是讓服務器計算事件,分數等等。我確信在SO上有很多類似的問題可以解決這些問題。 – 2012-02-11 13:51:47

+0

我已經在服務器上用瘋狂的加密算法做了這種計算,事實上即使是從服務器傳過來的分數 - >加密的客戶端,所以任何試圖理解它們的嘗試都是徒勞的。我正在考慮使用websockets,雖然它更安全,然後firebug等,迄今爲止,沒有辦法攔截他們[至少按我所知道的最佳] – ShrekOverflow 2012-02-11 13:57:15

0

JS代碼總是可用的,你可能想混淆你的代碼,使作弊的難度

2

你不能信任客戶端的硬件上運行任何東西,而且它。即使你給出的例子,任何人都可以輕鬆修改並重新加載你的腳本來作弊。這裏最好的選擇就是不要爲此付出額外的努力,而是通過正常編寫應用程序並通過像UglifyJS這樣的預處理器來運行它。 Rob在他的回答中指出的匿名函數模式也很常見。

此外,關於MD5哈希的東西 - 不,即使是在「私有範圍」您仍然可以查看和修改它在一個JavaScript調試器。這裏的關鍵是,有人永遠欺騙,因爲JavaScript的執行環境的整個本質 - 它只是你需要讓儘可能它難以通過混淆你的代碼(顯然是在利用預處理器)作弊及其他類似的技術。

0

所有的安全性都可以用足夠的時間繞過。每一項安全措施的目標都是增加破解Rob W所說的內容所需的時間,但我建議你也投資混淆/最小化JavaScript,這將對分析所需的時間和精力產生更大的影響它並創建假Ajax請求而不是避免全局變量。

不過,我同意,一個基於JavaScript的應用程序不會是非常安全的。你可以期望的最好是「討厭的黑客」

How can I obfuscate (protect) JavaScript?

相關問題