2016-06-30 22 views
0

我在考慮讓其他人在我的網頁中注入腳本。我有一些用戶已知的祕密,所以我不介意用戶是否打開調試器來檢查變量。 (真正的祕密和真正的安全當然是在後端處理)javascript私有變量真的很安全嗎?

我不想讓這些第三方腳本訪問這些祕密。

所以這裏是我的問題:外部代碼可以訪問我的對象的私人成員?或換句話說:JavaScript中的私有變量有多安全?我很困惑,因爲我理解它的方式,似乎原型並不能真正幫助保守祕密。與此同時,我認爲這種安全考慮可能是網絡瀏覽器的責任,但我不能100%確定。

非常感謝!

編輯:我特別想到惡意的人會查看源代碼並刻意編寫代碼來嘗試提取這些私有成員的值的情況。我想知道這在什麼程度上是可能的 - 如果是這樣的話。

編輯:

我指的是什麼叫打字原稿轉換爲「私有」變量:

class Greeter { 
    private greeting: string; 
    public message: string; 
    constructor(message: string) { 
     this.message = message; 
    } 
    greet() { 
     return "Hello, " + this.message; 
    } 
} 

望着JS,我能理解爲什麼它是不是很安全。我幾乎忘記了TypeScript不是JS。但我一般都在討論封裝javascript的方法。

+2

如果您允許某人在您的頁面中注入腳本,他們可以訪問* everything *。 – zzzzBov

+0

感謝您的關注。有趣的是,爲什麼私人變量被稱爲私人?他們的意思是什麼? – reddy

+0

你能詳細說明你的意思是什麼樣的「私人」變量嗎?Javascript沒有public/private的概念,特別是當涉及到通過其他腳本引用腳本時,一個具體的例子可能有助於理解你的問題的真正含義。 –

回答

2

我不想讓這些第三方腳本訪問這些祕密。

然後不要讓他們訪問該頁面。將它們鎖定在跨源iframe沙箱中。

外部代碼是否可以訪問我的對象的私有成員?

是的。它可能需要跳過一些可怕的箍環(取決於你如何實現隱私),但我想不出有什麼辦法在同一個JS環境中可靠地保護其他代碼的代碼。

換句話說:JavaScript中的私有變量有多安全?

不是很。

同時,我認爲這安全的考慮可能是Web瀏覽器的責任

只有直到在這裏裝載第三方源代碼到你的程序的地步。

+0

感謝您的全面解答,並感謝使用iframe的想法。 – reddy