目录

  1. 概述
  2. 缺少同源策略的安全性问题
    1. 没有同源策略限制的 Ajax 请求
    2. 没有同源策略限制的 Dom 查询
    3. 总结
  3. 同源策略的限制
  4. 附录

概述

❓为什么会需要同源策略这种东西?

  • 互联网早期,Cookie 解决了状态管理的问题,同样带来了 Cookie 管理的问题,如果 A 网页设置了 Cookie,B 网页能否使用 A 网页设置的 Cookie(Cookie 可是包括了用户隐私的数据);如果 A 网页具有一个脚本,在网页打开时就会运行,这个网页能否在本地浏览器访问 B 网页时也运行尼?
  • 诸如此类的安全性问题,需要引入同源策略才能解决,同源策略是浏览器重要的安全策略,用于限制一个Origin(源)的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介

❓同源策略中的同源是什么意思?

  • 如果两个 URLprotocolporthost都相同的话,则称这两个 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失败主机不同

同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现——百度百科

📓所有的同源策略都是由浏览器执行的,所有的限制都是因为浏览器的作用,这是因为浏览器为保护用户隐私而才去进行的措施

缺少同源策略的安全性问题

🤔我知道了同源策略是为了用户的安全性考虑才增加的,但是我就是不用同源策略,会有什么安全问题?

  • 缺少同源策略的接口请求
  • 缺少同源策略的 Dom 查询

没有同源策略限制的 Ajax 请求

🎶如果没有XMLHttpRequest同源策略,黑客可以进行CSRF(跨站请求伪造)攻击

⛵用户被入侵的攻击方式如下:

  1. 用户登录了自己的银行页面 http://mybank.comhttp://mybank.com 向用户的 cookie 中添加用户标识
  2. 用户浏览了恶意页面 http://evil.com,执行了页面中的恶意 AJAX 请求代码
  3. http://evil.comhttp://mybank.com 发起 AJAX HTTP 请求,请求会默认把 http://mybank.com 对应 cookie 也同时发送过去
  4. 银行页面从发送的 cookie 中提取用户标识,验证用户无误,response 中返回请求数据【此时恶意网页获取了用户的数据】

🎶甚至由于 Ajax 是在后台执行的,用户在感知不到的情况下就失去了自己的隐私

没有同源策略限制的 Dom 查询

🎶如果没有 Dom 同源策略,不同域的iframe之间可以相互访问,黑客仍然可以进行攻击

⛵黑客的攻击步骤如下:

  1. 做一个假网站,里面用 iframe 嵌套一个银行网站 http://mybank.com
  2. 把 iframe 宽高啥的调整到页面全部,此时除了域名,别的部分和银行的网站没有任何差别,如果用户不仔细注意域名的区别,将会以为这个冒充的网站就是官网
  3. 此时用户输入账号密码,伪造网站可以跨域访问到 http://mybank.com 的 dom 节点,就可以拿到用户的账户密码了

总结

📓如今看来拥有同源策略还能保证用户上网稍微安全一点,能够让用户规避到一些很容易遇到的攻击手段。但是,同源策略的确能够规避一些危险,并不代表有了同源策略就安全,只是说同源策略是一种浏览器最基本的安全机制

同源策略的限制

✨如果两个 URL 非同源,共有三种行为受到限制

  • 不能获取不同源的 cookie,LocalStorage 和 indexDB
  • 不能获取非同源的 DOM
  • 不能发送非同源的 ajax 请求。(可以向非同源的服务器发起请求,但是返回的数据会被浏览器拦截)

如果想要解决以上三种由于同源策略造成的限制,就需要跨域

📖关于跨域相关记录可以在我的博客中查找

附录

浏览器同源政策及其规避方法
浏览器同源策略及跨域的解决方法
什么是 CSRF