是什么原因/背景使该脚本<标签不是同源策略的一部分

What is the reason/background that the <script> tag is not part of the Same origin Policy

本文关键字:标签 一部分 策略 背景 脚本 是什么      更新时间:2023-09-26

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

我一直在想,为什么<script>标签不是它的一部分?我发现这个问题被问了好几次,也在这里的stackoverflow上,但所有的回复都没有回答为什么它不是它的一部分。

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

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

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

  • 并非所有脚本都必须托管在您自己的站点上,因此,
  • 脚本可以由内容交付网络托管,可以更快地交付它们,并允许客户端使用缓存版本的流行脚本。
  • 外部脚本允许我们通过JSONP进行跨域AJAX请求。

而且,script标签历史上早于同源策略,所以脚本可以引用不一定由同一站点托管的文件是有意义的,与a, img, embed, frame和其他标签一致。

当然部分原因是<script>标签比同源策略早得多,所以阻止它的使用会破坏很多网页。

我相信另一个原因是相同的原始策略可以防止信息被不同的源访问,而不是创建它的源。脚本标记不允许将信息发送到它的原点,或者至少不允许发送比其他GET请求(如<style><img>)更多的信息。

虽然有可能的方法绕过它,但script标记src参数通常是在静态HTML中设置的固定值。无论是过去还是现在,就安全风险而言,对这种方式的跨域脚本请求都没有太多关注。另一方面,允许它确实有很大的好处—用于脚本下载的cdn,托管在云上的jQuery,等等。还需要考虑向后兼容性。

对于AJAX请求来说就不是这样了,在AJAX请求中,脚本URL可能(而且经常)来自用户输入或其他动态状态。平均而言,破解的进入门槛要比破解script标签的低得多,其中"破解"="导致安全漏洞"。

  • 来源:猜测