2014-05-11 22 views
0

我需要允許用戶定義的計算,它們以字符串形式存儲。公式在執行之前通過用實際值替換變量來動態分析。安全評估用戶定義的計算

在這種情況下,只有屬於同一個客戶帳戶的人可能會相互注入惡意代碼,一個流氓員工攻擊同事,這已經夠糟糕了。

例子我能想到的(我敢肯定有更多):

"{x} * {y} * function() {...}()" 
"{x} * {y} * eval(...)" 

// replace variables 

eval("above input strings") 

現在我正在尋找如何確保這一想法。需要降低運行eval()的風險,還是需要編寫複雜解析器的替代方案?

+0

在這種情況下,它在瀏覽器中運行的離線Web應用程序以及包裹在Apache科爾多瓦。立即嘗試http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/。 –

+0

或者我可以選擇服務器端的字符串過濾。 –

+0

不能簡單地處理服務器端的計算? – SilverlightFox

回答

0

我遇到了類似的問題,我需要運行由第三方編寫的不受信任的JavaScript。如果您只是希望它很簡單,則可以使用WebWorker,該WebWorker生成一個單獨的線程,該線程無法訪問像window這樣的全局變量。

注意:WebWorker需要HTML5。在主JavaScript文件

self.onmessage = function(e) { 
    postMessage(eval(e.data)); 
}; 

然後:

創建「worker.js」文件

var worker = new Worker('worker.js'); 
worker.onmessage = function(e) { 
    alert('The answer is ' + e.data); 
    worker.terminate(); // to free up the resources 
}; 
var my_already_parsed_function = '3+5+6'; 
worker.postMessage(my_already_parsed_function); 
+1

[OWASP不建議這樣](https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Web_Workers):'雖然Web Workers無法訪問調用頁面的DOM,但惡意Web Workers可以使用用於計算的CPU數量過多,導致拒絕服務狀況或濫用跨源資源共享以供進一步利用。確保所有Web Workers腳本中的代碼不是惡意的。不允許從用戶提供的輸入中創建Web Worker腳本。' – SilverlightFox

+0

與Flash漏洞利用或密碼截取相比,DoS不是我關心的問題。不知道在網絡工作者內部CORS濫用可以做什麼..? –

+1

@Besrl:如果您的網站有權與其他域進行交談,那麼在作爲XSS受害者運行時,工作人員中運行的任何惡意代碼都可能利用此信任。 – SilverlightFox