绕过我自己计算机上的浏览器安全限制

时间:2012-08-21 22:53:42

标签: javascript security code-access-security

我正在尝试通过前缀(en,fr,es,...)创建一个语言列表(从左到右或从右到左。其他方向在维基百科中不存在)维基百科。为此,我编写了一个可以在this page上执行并将数据存储在变量中的JS代码。代码打开每个维基百科的主页,并尝试根据其<html>元素的'dir'属性检查语言的方向。但是,由于每个Wikipedia都有不同的域,因此出于安全原因,浏览器不允许我访问此数据。有浏览器吗?是否可以更改我的首选项以启用它?

P.S。代码:

var as = document.querySelectorAll('a.extiw'), pre, win, dirByPre = {};
for each (var a in as)
   if (pre = /^http:\/\/(\w+)\.wikipedia\.org\/wiki\/$/.exec(a.href)) {
      win = open(pre[0]);
      win.onload = function () {
         opener.dirByPre[pre[1]] = document.documentElement.dir;
         close();
      };
   }

非常感谢!

3 个答案:

答案 0 :(得分:0)

有一个原因,在现代浏览器中通常不允许这样做。当允许任意JavaScript访问其他域时,存在许多安全问题。一个例子是XSS (cross-site scripting)

如果您没有尝试在浏览器中运行 脚本,那么您尝试做的事情会容易得多。实际上,Python,Ruby或任何其他脚本语言都可以轻松使用单个HTTP请求。如果您了解JavaScript,Node.JS怎么样?

答案 1 :(得分:0)

这可能是一个奇怪的解决方案,但您可以编写一个浏览器扩展程序,允许您进行跨域请求。有很简单的方法来开发扩展程序,例如Crossrider,它有一个X-Domain addon,允许您通过Javascript发出跨域请求。

答案 2 :(得分:0)

您遇到的是访问控制允许来源错误。阅读它,Access Control Allow Origin not allowed by

通常,如果要访问另一个页面的数据以便在JS中使用,则需要在自己的服务器上执行此操作并将其传递给Javascript。

但是,在这种情况下,最好的解决方案是通过其API访问Wikipedia并请求JSONP响应。请记住,Wikipedia是基于MediaWiki构建的,因此请参阅其API文档http://www.mediawiki.org/wiki/API:Main_page

title = "List_of_Wikipedias"; 

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?", function(data) {
    console.log(data);
})

请注意“format = json”和“callback =?”

这种JSONP方法适用于所有现代浏览器。