概述
同源策略 是一个重要的安全策略,它用于限制一个 origin 的文档或者它加载得脚本如何能与另一个源的资源进行交互。它能帮助阻挡恶意文档,减少可能被攻击的媒介 [ MDN ] .
同源的定义
如果两个 URL 的 protocol 、port (en-US) (有指定时)和 host 都相同的话,则这两个 URL 是同源。这个方案也被称为 “ 协议 / 主机 / 端口元组 ”,或者直接是 “ 元组 ” 。(“ 元组 ” 是指一组项目构成的整体,双重 / 三重 / 四重 / 五重 / 等的通用形式)
下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:
URL | 结果 | 原因 |
http://store.company.com/dir2/other.html |
同源 | 只有路径不同 |
http://store.company.com/dir/inner/another.html |
同源 | 只有路径不同 |
https://store.company.com/secure.html |
失败 | 协议不同 |
http://store.company.com:81/dir/etc.html |
失败 | 端口不同 ( http:// 默认端口是80) |
http://news.company.com/dir/other.html |
失败 | 主机不同 |
源的继承
在页面中通过 about:blank 或 javascript: URL 执行的脚本会继承打开该 URL 的文档的源,因为这些类型的 URLs 没有包含源服务器的相关信息。
例如,about:blank
通常作为父脚本写入内容的新的空白弹出窗口的 URL(例如,通过 Window.open() )。 如果此弹出窗口也包含 JavaScript,则该脚本将从创建它的脚本那里继承对应的源。