2012-06-01 24 views
1

我有一個從本地文件系統加載並使用awesomium呈現的網頁,頁面使用AngularJS來呈現頁面的一部分。但是,我有一個問題,我AngularJS控制器產生一個DOM異常18部分:Awesomium中的DOM Exception 18

angular-1.0.0rc10.js @ line 5349 Error: SECURITY_ERR: DOM Exception 18

看來,這異常是由該代碼的存在在我的AngularJS控制器結束造成的:

$http({method: 'GET', url: 'http://placeholdermetaserver.appspot.com/list?format=json&game=Heist'}) 
.success(function(data) 
{ 
    //Do stuff with data 
}); 

奇怪的是,一切都只是罰款,如果我使用的是直的XMLHttpRequest而不是AngularJS $ HTTP對象:

var request = new XMLHttpRequest(); 
request.onload = function() { 
    //Do stuff with data 
}; 
request.open("GET", "http://placeholdermetaserver.appspot.com/list?format=json&game=Heist", true); 

此異常不是生成時,我簡單地加載此頁在鉻(關閉本地文件系統,與awesomium相同)。

什麼可能導致這種情況,我該如何解決?

回答

0

$http服務包括一些跨站點請求僞造(XSRF)對策。我對Awesomium並不是特別熟悉,所以我不確定它實現了什麼安全功能,但我會參考文檔(Awesomium和AngularJS)以獲取更多信息。

http://docs.angularjs.org/api/angular.module.ng.$http

從服務器的角度來看,這是容易出現textbook XSRF img tag attack如果你發送就像一個GET請求:

" http://myapp.com/doSomething/somegame/12345 "

從客戶的角度出發,讓我們說你犯了一個要求如:

" http://myapp.com/doSomething/somegame/ " + someId

一個聰明的黑客可能哄someId是:

"@123.45.56.689/myEvilFakeJson.json" 

在這種情況下,請求不會發送到您的服務器,而是一些 另一個。如果您對請求的位置進行了嚴格的編碼,或者對消毒輸入進行了仔細的處理,則可能不會帶來太大的風險。

+0

啊,從這些文檔看,它看起來像$ http應該永遠不會工作,在awesomium或鉻,我想要做什麼? Awesomium有一個選項可以完全禁用我運行的同一個源策略,除了我無法找到文檔中提到的任何應該影響此策略的特定安全措施。 – Martin

+0

@Martin是的,可能是這種情況。雖然我討厭建議它(因爲它可能不太安全),但最好的辦法可能是使用XMLHttpRequest。 – btford

+0

在哪些方面可能不太安全? – Martin