2012-10-08 64 views
2

本質上,我想在客戶端中存儲一個變量,我不希望人們查看或更改。外部開發人員可以在運行時訪問閉包變量嗎?

在下面的代碼示例:

(function() { 
    var foo = 'bar'; 
})(); 

任何人都可以使用的工具或瀏覽器來訪問和/或(更重要的)改變foo的價值?鏈接到更多的信息或工具,可能會這樣做,將不勝感激。我會在同一時間進行更多的研究。

在此先感謝

+6

人們可以使用瀏覽器來完全重寫你的js,如果他們願意的話。 – geekchic

+1

客戶端可以看到您的源代碼,並可以對它做任何事情,它可能不是瀏覽器或您知道的任何應用程序。 – RobG

+0

...這都是因爲Javascript執行客戶端而不是服務器端。如果將用戶的這些信息隱藏起來,不要依賴JS。 – inhan

回答

3

是的,他們可以修改foo的值。作爲一般規則,如果您不希望客戶端操縱該值,請不要讓他們訪問它(即將用戶標識或此類信息放在DOM或客戶端)。您可能需要做一些state management研究,加密的Cookie中,會話或者如果你使用ASP.NETViewState/ViewBag

+0

我知道那些開發工具,但我正在尋找一種具體的方式,可以在匿名關閉中實際更改變量。如果在控制檯中輸入log(foo),它將會是未定義的,因爲它不是全局的。它也不是字典(對象)的一部分,所以它不能作爲成員訪問。 –

+0

@BrianCray客戶端的變量可以被操縱。例如,我可以使用我的瀏覽器將foo =「bar」的值更改爲foo =「Darren」。我可以根據需要引入更多變量,甚至可以使用我的自定義變量數據將數據發送到您的服務器。你究竟想達到什麼目的? –

0

這可能注入的JavaScript嵌入任何網頁,並從那裏你可以操縱每一個JavaScript對象/變量在頁面上。因此,JavaScript正在接收的任何數據都應該加密(如果您擔心安全問題)。

爲了給您一點提示,請嘗試打開您的開發人員工具。在chrome中,Control-Shift-I。單擊腳本選項卡,然後您將看到腳本正在使用的所有變量。可以在腳本中的任何位置雙擊並添加/刪除代碼段。

F.Y.I如果您使用Firefox,我強烈建議使用Firebug。它超越了chrome的開發工具,但是我發現chrome速度更快。至少在我的慢速筆記本電腦(Ubuntu FTW)上。

希望這會有所幫助

+1

我知道那些開發工具,但我正在尋找一種特定的方式,可以在匿名關閉中實際更改變量。如果在控制檯中輸入log(foo),它將會是未定義的,因爲它不是全局的。它也不是字典(對象)的一部分,所以它不能作爲成員訪問。 –

+0

使用代碼中的正確斷點,可以修改任何對象/變量。他們可以在將屬性分配給一個對象之後立即設置一個斷點,並將其改爲任何他們想要的。如果安全是問題,那麼JavaScript正在接收的任何數據都應該被加密。 – LukeStoneHm

相關問題