浏览器同源策略及Cookie的作用域
2020-07-27 本文已影响0人
LANSHENGYANG
一、浏览器同源策略
1)概述
- 1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同":
[图片上传失败...(image-fc4329-1595907330371)] - 举例来说,
http://www.example.com/dir/page.html
这个网址,协议是http://
,域名是www.example.com
,端口是80
(默认端口可以省略)。它的同源情况如下:
[图片上传失败...(image-20d009-1595907330371)]
2)目的
- 同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的Cookie,会发生什么。
- 很显然,如果Cookie包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。由此可见,"同源政策"是必需的,否则Cookie可以共享,互联网就毫无安全可言了。
3)限制范围
- 随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制:
[图片上传失败...(image-88b142-1595907330371)] - 虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。例如,我同一个站点的两个不同域名不能共享Cookie;再例如,我的前端页面项目的域名与我后端Jetty服务的域名不同,那么我就无法发送Ajax请求来访问Jetty服务,等等。
- 也就是说同源策略会带来一系列跨域访问的问题,我们如何来规避这些问题,主要JSONP与CORS两种方案。
二、Cookie作用域
1)Cookie概述
- Cookie,顾名思义,小甜心,少食即可,多吃无益。主要是通过浏览器保存在客户端的一些安全性要求不高的临时数据。
2)Cookie两个重要属性
- Cookie有两个很重要的属性:Domain和Path,用来指示此Cookie的作用域:
-
Domain告诉浏览器当前要添加的Cookie的域名归属,如果没有明确指明则默认为当前域名,比如通过访问
www.vinceruan.info
添加的Cookie的域名默认就是www.vinceruan.info
,通过访问blog.vinceruan.info
所生成的Cookie的域名就是blog.vinceruan.info
。 -
Path告诉浏览器当前要添加的Cookie的路径归属,如果没有明确指明则默认为当前路径,比如通过访问
www.vinceruan.info/java/hotspot.html
添加的Cookie的默认路径就是/java/,通过blog.vinceruan.info/java/hotspot.html
生成的Cookie的路径也是/java/。
3)Cookie作用域
- 浏览器提交的Cookie需要满足以下两点:
- 1.当前域名或父域名下的Cookie;
- 2.当前路径或父路径下的Cookie。
- 要满足以上两个条件的Cookie才会被提交。举个例子:有4个Cookie:
[图片上传失败...(image-174e0f-1595907330371)] - 当我访问blog.vinceruan.info时:
[图片上传失败...(image-e67714-1595907330371)] - 这里需要注意的是,在浏览器看来,
www.vinceruan.info不是blog.vinceruan.info
的父域名,而vinceruan.info
才是blog.vinceruan.info
的父域名,www.vinceruan.info
也算是一个二级域名(这点如果你提交过域名到DNS服务器商的应该会知道,一般我们需要显式提交www.vinceruan.info和vinceruan.info
,否则www.vinceruan.info==vinceruan.info
是不成立的)。 - 所以如果我们需要在所有二级域名下共享islogin=1的Cookie,用java代码如下:
[图片上传失败...(image-7762cd-1595907330371)] - 如果要在所有的二级域名下的/java/路径下共享silogin=1的Cookie,用java代码如下:
[图片上传失败...(image-9ead6a-1595907330371)]
三、总结
- 上面介绍了浏览器具有同源策略:协议相同、域名相同、端口相同,而由此也带来了一系列的跨域资源访问问题。还介绍了浏览器筛选Cookie并提交到服务器的规则:当前域名或者父域名下的并且是当前路径或父路径下的Cookie才会被提交到服务器