最近几个月我读了很多关于浏览器和跨域请求的同源策略。
我一直在想,<script>
标签不属于它的原因是什么?
我发现问题要问几次,也是在stackoverflow上,但所有回复都没有回答为什么它不是它的一部分。
这是由于历史原因还是这个想法背后的背景?
我希望有人可以帮我解决这个问题。
答案 0 :(得分:1)
我不知道他们认为外国<script>
不需要被阻止的原因,但这个决定有很多好处。
此外,script
标记历史上早于同源策略,因此脚本可以引用不一定由同一网站托管的文件,这与a
,{{{ 1}},img
,embed
和其他标签也可以。
答案 1 :(得分:0)
当然,部分原因是<script>
标签比相同的原始政策要早得多,因此阻止其使用会破坏很多网页。
我认为另一个原因是,相同的原始策略可以阻止信息被不同的来源访问。脚本标记不允许将信息发送到其来源,或者至少,没有比任何其他GET请求更多的信息,例如<style>
或<img>
。
答案 2 :(得分:-2)
虽然有可能解决此问题,script
标记src
参数通常是静态HTML中设置的固定值。无论是历史上还是现在,在安全风险方面,都没有太多关注这种方式的跨域脚本请求。另一方面,允许它有很大的好处 - 用于脚本下载的CDN,在云上托管的jQuery等等。还需要考虑向后兼容性。
对于AJAX请求,情况并非如此,其中脚本URL可能(通常也是)来自用户输入或其他动态状态。平均而言,打破的进入障碍远低于打破script
标签,其中“破坏”=“导致安全漏洞”。