同源策略,它是由Netscape提出的一个著名的安全策略。
现在所有支持JavaScript 的浏览器都会使用这个策略。
同源的定义
同源是指域名,协议,端口三个都相同。
下面的网站同源吗?
-
http://www.jianshu.com 和http://jianshu.com
不同源,因为域名不同 -
http://www.bilibili.tv和http://www.bilibili.com
不同源,因为域名不同 -
http://localhost:3000 和 http://localhost:3001
不同源,因为端口不同 -
http://qq.com 和https://qq.com
不同源,因为协议不同 -
https://www.pixiv.net 和 https://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。
搜索跨域请求有很多文章。
网友评论