我有一个从本地文件系统加载并使用awesomium呈现的网页,该页面正在使用AngularJS呈现页面的一部分。但是,我的AngularJS控制器的一部分产生了一个Dom Exception 18:
angular-1.0.0rc10.js @ line 5349错误:SECURITY_ERR:DOM异常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);
当我只是在chrome中加载这个页面时,这个异常是而不是生成的(在本地文件系统之外,与awesomium相同)。
可能导致此问题的原因以及如何解决?
答案 0 :(得分:0)
$http
服务包括一些跨站点请求伪造(XSRF)对策。我对Awesomium并不是特别熟悉,所以我不确定它实现了哪些安全功能,但我会查阅文档(Awesomium和AngularJS)以获取更多信息。
http://docs.angularjs.org/api/angular.module.ng.$http
从服务器的角度来看,如果您发送GET请求,则很容易出现textbook XSRF img tag attack:
从您的客户的角度来看,假设您提出的请求如下:
“http://myapp.com/doSomething/somegame/”+ someId
聪明的黑客可能会哄骗某些人:
"@123.45.56.689/myEvilFakeJson.json"
在这种情况下,请求不是针对您的服务器,而是针对某些请求 另外一个。如果您对请求的位置进行硬编码或谨慎处理清理输入,则可能不会有那么大的风险。