2010-06-07 45 views
6

我想讓開發人員用Javascript在Javascript中爲網站編寫一些自定義應用程序,但我希望將其用於沙盒,以便它們不會做任何調皮的用戶重定向,將主體顯示設置爲none等等。命名空間在Javascript中,他們會永遠需要存在的所有功能,所以我想創建一個沙箱會是一個問題的:Javascript Sandbox

with(Namespace) { 
    //App code goes here where they can only access Namespace.* 
} 

如何是很容易的是它解決這個問題,什麼其他方法可以做完了?寧願不必調節每個提交的應用程序。

回答

1

要執行一個沙箱,您必須在代碼執行前檢查它,捕獲任何非合法代碼,並且如果找到,則以某種方式阻止其運行。非常乏味,很容易出現很長時間的錯誤。

Facebook至少在他們的早期平臺中做過這件事,作爲開發者,我絕對不喜歡它。它們限制了可以使用的本地方法,併爲一些方法提供了有限的包裝。

+0

事實上,編寫這樣一個代碼檢查器是不可能的*,因爲它可以歸結爲解決暫停問題;)(考慮構建'''以某種奇怪的方式並調用'window [s]()') – mik01aj 2014-03-28 12:30:08

2

首先想到的是eval。他們可以使用它在包裝器沙箱外執行自定義代碼。通過嘗試打包代碼來阻止有決心的開發人員將非常困難。

Link使用eval。

+1

Google Caja和ADSafe可以限制'eval' :-) – CMS 2010-06-07 05:46:02

8

好了,此刻的選項,以沙盒代碼是:

兩者都允許你創建一個安全的環境在訪問全局對象並且DOM受到限制。

這些項目的主要目的是讓您安全地嵌入第三方的小部件和任何網頁內容。

+0

它是否也阻止它們修改Object.prototype? – mik01aj 2014-03-28 12:31:09