浏览器同源策略是什么?没有同源策略会怎么样?

同源策略,它是由Netscape提出的一个著名的安全策略。
现在所有支持JavaScript 的浏览器都会使用这个策略。

同源的定义

同源是指域名,协议,端口三个都相同。
下面的网站同源吗?

  1. http://www.jianshu.comhttp://jianshu.com
    不同源,因为域名不同
  2. http://www.bilibili.tvhttp://www.bilibili.com
    不同源,因为域名不同
  3. http://localhost:3000http://localhost:3001
    不同源,因为端口不同
  4. http://qq.comhttps://qq.com
    不同源,因为协议不同
  5. https://www.pixiv.nethttps://www.pixiv.net/manage/illusts/
    同源,因为域名,协议,端口都相同

不同源会怎么样?

对于js脚本有限制。
主要表现在3点
(1) 无法用js读取非同源的Cookie、LocalStorage 和 IndexDB 无法读取。
(2) 无法用js获取非同源的DOM 。
(3) 无法用js发送非同源的AJAX请求 。更准确的说,js可以向非同源的服务器发请求,但是服务器返回的数据会被浏览器拦截。

是谁来执行同源策略的?

同源策略是由浏览器来执行。所有的限制都是浏览器的作用。这是浏览器为了保护用户的数据安全而采取的策略。

同源策略如何保护用户数据安全?没有同源策略会怎么样?

同源策略对于js的限制有3点,我们一点一点来说。

(1) 无法用js读取非同源的Cookie、LocalStorage 和 IndexDB 无法读取。

这条很好理解。
为了防止恶意网站通过js获取用户其他网站的cookie。

(2) 无法用js获取非同源的DOM 。

如果没有这一条,恶意网站可以通过iframe打开银行页面,可以获取dom就相当于可以获取整个银行页面的信息。

(3) 无法用js发送非同源的AJAX请求 。

这一条我一开始也没搞懂为什么。如果没有这一条会有什么危害?
看了这篇文章后我终于懂了https://blog.csdn.net/hcrw01/article/details/84289109
我把这部分复制过来放在这里。

假设有一个黑客叫做小黑,他从网上抓取了一堆美女图做了一个网站,每日访问量爆表。
为了维护网站运行,小黑挂了一张收款码,觉得网站不错的可以适当资助一点,可是无奈伸手党太多,小黑的网站入不敷出。
于是他非常生气的在网页中写了一段js代码,使用ajax向淘宝发起登陆请求,因为很多数人都访问过淘宝,所以电脑中存有淘宝的cookie,不需要输入账号密码直接就自动登录了,然后小黑在ajax回调函数中解析了淘宝返回的数据,得到了很多人的隐私信息,转手一卖,小黑的网站终于盈利了。
如果跨域也可以发送AJAX请求的话,小黑就真的获取到了用户的隐私并成功获利了!!!

如何跨域请求

这篇主要讲为什么要有同源策略。
至于怎么跨域访问,常用的方法有CORS,JSONP和iframe。
搜索跨域请求有很多文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。