01-跨域和跨站的基本概念

介绍一下跨域和跨站的基本概念、以及简要解释第三方cookie的原理。

一级域名 二级域名 三级域名

一般来说就是比如www.baidu.com.com是一级域名; baidu是二级域名; www是三级域名。其后同理。

跨域和跨站的区别

首先要理解的一点就是跨站和跨域是不同的。同站(same-site)/跨站(cross-site)」和第一方(first-party)/第三方(third-party)是等价的。但是与浏览器同源策略(SOP)中的「同源(same-origin)/跨域(cross-origin)」是完全不同的概念。

同源策略的同源,是指两个 URL 的“协议+主机名+端口”3者都一致。例如,https://www.taobao.com/pages/...,它的协议是 https,主机名是www.taobao.com,端口是 443,另一个url的这3者与之都一致才能叫“同源”。

同源策略作为浏览器的安全基石,其“同源”判断是比较严格的,而相对而言,Cookie中的“同站”判断就比较宽松:只要两个 URL 的 eTLD+1 相同即可,不需要考虑协议和端口。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co、.uk、.github.io 等。而 eTLD+1 则表示,有效顶级域名+二级域名,例如taobao.com等。

举几个例子,www.taobao.com和www.baidu.com是跨站,www.a.taobao.com和www.b.taobao.com是同站,a.github.io和b.github.io是跨站(注意是跨站)。

cookie跨站 和 sameSite属性

引用一下他处:浏览器同源指的是协议,域名,端口都相同;Cookie中的“同源”只关注域名,忽略协议和端口,也就是Cookie可以跨二级域名来访问,也可以称为“同站”。

浏览器本身是允许cookie同站通信的;而所谓的“跨站”,比如cookie跨站实现第三方cookie,实际上就是想利用浏览器更加“开放”的那些规则来突破“同站”。

浏览器sameSite属性的提出背景:可以默认让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。在chrome 80中提出,导致之前上线的跨站的Cookie用不了。(其实就是针对和打击第三方Cookie)

sameSite新属性引发的问题,及其解决:解决方案就是手动设置 SameSite 为 none。

第三方Cookie的实现(本质上就是cookie跨站)

其实就是请求一张图片的请求响应也可以设置Cookie,本身是完全可以“跨域”和“跨站”的。但是现在各浏览器的趋势是禁止第三方Cookie。

文章目录
  1. 一级域名 二级域名 三级域名
  2. 跨域和跨站的区别
  3. cookie跨站 和 sameSite属性
  4. 第三方Cookie的实现(本质上就是cookie跨站)