2014-05-20 31 views
0

我正在編寫將由外部客戶使用並由我的客戶在其Web瀏覽器中執行的js API。關閉對全局變量的訪問javascript

由於這對我的網絡用戶(安全漏洞等)可能有害,因此我希望允許或禁止訪問至少document全局變量以及其他類似API的XMLHTTPRequest

我該怎麼做?

編輯: 我想上的包裝器API的用戶編寫的功能做這樣的事情document = null,但它不工作。此外,使用這種方法很難徹底,因爲有太多的解決方法和太多的可能性來考慮所有這些方法。

+0

根據您如何運行他們的代碼有可能暗影這些變量。要完全切斷它們並不容易,可能需要嚴格的模式。祝你好運。 – david

+0

不要編寫JavaScript中的API?使用正確的工具來完成這項工作。 JavaScript並不是每個編程問題的重錘。 –

+0

喬治,該API可以在任何一種語言(在這種情況下是'node.js的),但API的結果需要被JS,因爲這意味着要分發到Web瀏覽器中運行的代碼。我使用其認爲小程序或Java Web Start的,但我不想告訴他們安裝的東西來賺取我的客戶不信任。 –

回答

1

Caja

卡哈編譯器是使第三方HTML,CSS和JavaScript安全在您的網站中嵌入的工具。它支持嵌入式頁面和嵌入式應用程序之間的豐富交互。 Caja使用對象能力安全模型來實現各種靈活的安全策略,以便您的網站可以有效控制嵌入的第三方代碼可以對用戶數據執行哪些操作。


ADSafe

的JavaScript,Web瀏覽器的編程語言,不是一個安全的語言。頁面中的任何腳本都可以親密地訪問頁面的所有信息和關係。這使得使用混搭和腳本廣告無法接受的風險。

ADsafe可以安全地將訪客代碼(如第三方腳本廣告或小部件)放在網頁上。 ADsafe定義了一個足夠強大的JavaScript子集,允許客人代碼執行有價值的交互,同時防止惡意或意外損壞或入侵。 ADsafe子集可以通過JSLint等工具進行機械驗證,因此不需要人工檢查來檢查客人代碼的安全性。 ADsafe子集還實施了良好的編碼實踐,增加了客人代碼正確運行的可能性。

2

答案很簡單:你不能。

這可能不是答案想要的,但是這些全局變量不能被修改。

親自嘗試一下:

window = 1; 
console.log(window) // Window {top: Window, window: Window, ... 

document = false; 
console.log(document) // #document (as in the document object) 
document = null; 
console.log(document) // #document (same) 

window.document = false; 
console.log(window.document) // #document 

然而,這似乎爲XMLHttpRequest成爲可能:

XMLHttpRequest = null 
console.log(XMLHttpRequest)  // null 
console.log(window.XMLHttpRequest) // null 

所以,你可能能夠禁用各項功能。

但是,像這樣的本地功能混淆是一個不好的想法,因爲它可能會有意想不到的副作用。例如,jQuery使用XMLHttpRequest作爲它的ajax函數。

+0

不僅是強大的全局不可改變的,[你不能有效地掩蓋他們(https://code.google.com/p/google-caja/wiki/DeleteUnmasksGlobals),甚至如果可以的話,那將被列入黑名單是安全歷史上對決心的攻擊者表現欠佳。 –