<script>标记不属于Same origin Policy </script>的原因/背景是什么?

时间:2013-01-13 16:11:20

标签: javascript ajax cross-domain same-origin-policy script-tag

最近几个月我读了很多关于浏览器和跨域请求的同源策略。

我一直在想,<script>标签不属于它的原因是什么? 我发现问题要问几次,也是在stackoverflow上,但所有回复都没有回答为什么它不是它的一部分。

这是由于历史原因还是这个想法背后的背景?

我希望有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

我不知道他们认为外国<script>不需要被阻止的原因,但这个决定有很多好处。

  • 并非所有脚本都必须托管在您自己的网站上,并且作为必然结果
  • 脚本可由内容交付网络托管,可以更快地提供这些脚本,并允许客户端使用流行脚本的缓存版本。
  • 外国脚本允许我们通过JSONP获得跨域AJAX请求。

此外,script标记历史上早于同源策略,因此脚本可以引用不一定由同一网站托管的文件,这与a,{{{ 1}},imgembed和其他标签也可以。

答案 1 :(得分:0)

当然,部分原因是<script>标签比相同的原始政策要早得多,因此阻止其使用会破坏很多网页。

我认为另一个原因是,相同的原始策略可以阻止信息被不同的来源访问。脚本标记不允许将信息发送到其来源,或者至少,没有比任何其他GET请求更多的信息,例如<style><img>

答案 2 :(得分:-2)

虽然有可能解决此问题,script标记src参数通常是静态HTML中设置的固定值。无论是历史上还是现在,在安全风险方面,都没有太多关注这种方式的跨域脚本请求。另一方面,允许它有很大的好处 - 用于脚本下载的CDN,在云上托管的jQuery等等。还需要考虑向后兼容性。

对于AJAX请求,情况并非如此,其中脚本URL可能(通常也是)来自用户输入或其他动态状态。平均而言,打破的进入障碍远低于打破script标签,其中“破坏”=“导致安全漏洞”。

  • 来源:猜测