Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器XSS:我遗漏了什么吗?_Javascript_Jquery_Ajax_Cross Domain - Fatal编程技术网

Javascript 浏览器XSS:我遗漏了什么吗?

Javascript 浏览器XSS:我遗漏了什么吗?,javascript,jquery,ajax,cross-domain,Javascript,Jquery,Ajax,Cross Domain,我觉得我缺少了一些基本的XSS预防措施,无论是在总体上还是在浏览器当前的实现上 我在域a有一个使用jQuery的站点。在某些情况下,我希望它定期检索和格式化托管在域B中的一些数据 在域A的源代码页面中,我似乎可以很高兴地放入一个,它将在当前页面的上下文中加载和执行脚本,特别是允许它读取和更新DOM。我还可以使用jQuery.getScript做同样的事情,它通过AJAX在内部获取并执行脚本 但是,无论我将其放入域A页面还是域B上的JS,如果我尝试使用jQuery.ajax加载http://B/d

我觉得我缺少了一些基本的XSS预防措施,无论是在总体上还是在浏览器当前的实现上

我在域a有一个使用jQuery的站点。在某些情况下,我希望它定期检索和格式化托管在域B中的一些数据

在域A的源代码页面中,我似乎可以很高兴地放入一个,它将在当前页面的上下文中加载和执行脚本,特别是允许它读取和更新DOM。我还可以使用jQuery.getScript做同样的事情,它通过AJAX在内部获取并执行脚本

但是,无论我将其放入域A页面还是域B上的JS,如果我尝试使用jQuery.ajax加载http://B/data.json 它会生成CORS违规错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
请注意,在测试时,域A是一个本地文件://,这可能就是它在那里显示空原点的原因。这将是一个真正的网站在实践中

我很难理解这种行为。我看不出加载JSON数据在任何方面都不如加载任意脚本安全——事实上,情况似乎恰恰相反


我问这个问题主要是想了解这有什么意义,但作为一个附带问题,我想知道执行这类事情的正确方法在域B上有一个脚本,可以从它自己的域加载数据,尽管从域A运行。如果绝对需要,我可以将Allow Origin标头添加到域B,但我不希望这样做。在域A上不可能做到这一点。

特别是让我困惑的一件事是,为什么SOP/CORS会通过http://B/something.js 访问http://B/data.json. 这不是同一个来源吗?来源是由页面定义的,而不是从哪里加载代码。我想这对于加载外部托管的JS库(如jQuery本身)来说很方便,但对我来说似乎还是违反直觉的。域B上的数据提供程序不应该信任存储在域B上的代码吗?虽然我想这还没有完成的原因是它需要单独跟踪每个函数和闭包的起源,以JS允许的所有奇怪的方式来存储它们,这将是一个很大的工作。另一方面,大多数浏览器中内置的JS调试工具现在基本上都必须这样做。