1

我有一个从本地文件系统加载并使用awesomium呈现的网页,该页面使用AngularJS呈现页面的一部分。但是,我的 AngularJS 控制器的一部分产生了 Dom 异常 18:

angular-1.0.0rc10.js @ 第 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 相同),不会生成此异常。

什么可能导致这种情况,我该如何解决?

4

1 回答 1

0

$http服务包括一些跨站点请求伪造 (XSRF) 对策。我对 Awesomium 不是特别熟悉,所以我不确定它实现了哪些安全功能,但我会查阅文档(Awesomium 和 AngularJS)以获取更多信息。

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

从您的服务器的角度来看,如果您曾经发送如下 GET 请求,这很容易受到教科书 XSRF img 标签攻击:

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

从您的客户的角度来看,假设您提出如下请求:

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

聪明的黑客可能会哄骗 someId 成为:

"@123.45.56.689/myEvilFakeJson.json"

在这种情况下,请求不会发送到您的服务器,而是发送到其他服务器。如果您对请求的位置进行硬编码或小心处理输入,则可能不会有太大的风险。

于 2012-06-01T23:22:58.110 回答