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

Bypassing a browser security limitation on my own computer

本文关键字:浏览器 安全 我自己 计算机      更新时间:2023-09-26

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

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();
      };
   }

非常感谢!

您遇到的是Access Control Allow Origin错误。读一读,访问控制允许来源不允许。

一般来说,如果你想访问另一个页面的数据以在JS中使用,你需要在自己的服务器上访问,并将其传递给Javascript。

然而,在这种情况下,最好的解决方案是通过其API访问维基百科,并请求JSONP响应。记住,维基百科是建立在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"answers"callback=?"

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

这在现代浏览器中通常是不允许的。当允许任意JavaScript访问其他域时,会存在许多安全问题。一个例子是XSS(跨站点脚本)。

如果你不想在浏览器内运行脚本,你要做的会容易得多。实际上,Python、Ruby或任何其他脚本语言都可以使用单个HTTP请求轻松地完成这项工作。如果你知道JavaScript,Node.JS怎么样?

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