什么是同源策略

3,122 阅读2分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

同源策略

  • 同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到 XSS、 CSFR 等攻击。

  • 在这个策略下,web浏览器允许第一个页面的脚本访问第二个页面里的数据,但是也只有在两个页面有相同的源时。源是由URI,主机名,端口号组合而成的。这个策略可以阻止一个页面上的恶意脚本通过页面的DOM对象获得访问另一个页面上敏感信息的权限。

  • 同源策略是为了安全,确保一个应用中的资源只能被本应用的资源访问

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。

由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了

同源

  • 协议相同
  • 域名相同
  • 端口相同 只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”。
| 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`          | 失败 | 主机不同(域名不同)

同源策略又分以下情况

  • DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里主要场景是 iframe 跨域的情况,不同域名的 iframe 是限制互相访问的。
  • XMLHttpRequest 同源策略:禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。

附加解决跨域的链接:juejin.cn/post/699554…