【发布时间】:2020-05-22 06:25:07
【问题描述】:
根据PortSwigger的description的同源策略(见下文),页面上的JavaScript无法读取跨域加载资源的内容,如<img>、<video>和<script>,在那个页面上。
但是,this 之类的答案表明:
当 mysite.com 打开一个标签时,该脚本在 当前页面。
或者换个说法:
脚本的起源是它被包含的地方。
那么,PortSwigger 到底是什么意思?如果页面上的 JavaScript 代码无法读取<script>s 的内容,那么 jQuery 和其他从 CDN 加载的 JavaScript 框架如何在页面中使用?
同源政策是如何实施的?(PortSwigger)
同源策略通常控制 JavaScript 代码对跨域加载的内容的访问权限。通常允许跨域加载页面资源。例如,SOP 允许通过<img> 标签嵌入图像、通过<video> 标签嵌入媒体,以及通过<script> 标签嵌入JavaScript。但是,虽然这些外部资源可以由页面加载,但页面上的任何 JavaScript 都无法读取这些资源的内容。
【问题讨论】:
-
@Teemu - 谢谢,我已经阅读了你的页面。我看到了,例如如果设置了
crossorigin,则<img>只能由 JavaScript 使用。你会详细说明吗?这是特例吗?确实,外部脚本 (<scripts src="...">) 与它所包含的页面一起运行? -
差不多就是这样。我无法比这些人在 MDN 上已经解释的更清楚。是的,从第三方服务器加载的脚本在您的域下运行,就像您从自己的服务器加载它一样,它甚至无法访问它来自的服务器,除非在该服务器上设置了 CORS服务器。一个例外是,您无法访问跨域脚本元素的 text 属性,这将访问实际内容,就像访问受污染的画布一样。
标签: javascript html same-origin-policy