本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/03/25/%E4%BB%80%E4%B9%88%E6%98%AFPublic-Suffix-List/
摘要
本文主要讲述了:
- 背景
- cookie
- 什么是 Public Suffix List
- 作用
正文
背景
域名可分为:
- 根域名(
.
) - 顶级域名(一级域名)
- 二级域名
- 三级域名
- ……
顶级域名被域名注册商持有。例如:com
、cn
用户只能持有顶级域名的子域名,即二级域名。例如:example.com
是com
的二级域名
当用户持有了二级域名之后,用户有两个选择:
- 子域名私有
- 子域名公共
示例:
example.com
的子域名私有。example.com
的持有人可以随意注册a.example.com
、b.example.com
等三级域名,且这些子域名都为example.com
持有github.io
的子域名公共。a.github.io
和b.github.io
属于两个不同的持有者,且这些子域名都不为github.io
持有
cookie
特别注意:以 Chrome 浏览器中最终存储的 cookie 的domain
为准
当
a.github.io
想要读写domain=.github.io
的 cookie 时,因为github.io
和a.github.io
属于不同的持有者,这属于跨站 cookie,客户端必须阻止读写(document.cookie = "jsweibo=123;domain=github.io";
)当
a.github.io
想要读写domain=.a.github.io
的 cookie 时,这属于同站 cookie,客户端允许读写(document.cookie = "jsweibo=123;domain=a.github.io";
)当
a.github.io
想要读写domain=a.github.io
的 cookie 时,这属于同站 cookie,客户端允许读写(document.cookie = "jsweibo=123";
)当
github.io
想要读写domain=.github.io
的 cookie 时,因为github.io
和a.github.io
属于不同的持有者,这属于跨站 cookie,客户端必须阻止读写(document.cookie = "jsweibo=123;domain=github.io";
)当
github.io
想要读写domain=github.io
的 cookie 时,这属于同站 cookie,客户端允许读写(document.cookie = "jsweibo=123";
)
综上所述,客户端必须知道哪些域名是公共的
什么是 Public Suffix List
Public Suffix List(公共后缀列表)。此列表列举了开放子域名注册的域名。例如:cn
、com.cn
作用
- 区分同站(第一方)和跨站(第三方)
- 和同源政策一起阻止浏览器端的 JavaScript 读写跨站 cookie,阻止服务器端的响应头写入跨站 cookie
示例:
example.com
的子域名私有。a.example.com
、b.example.com
、example.com
属于同站github.io
的子域名公共。a.github.io
、b.github.io
、github.io
属于跨站
注意:cookie 的读写并未完全遵循同源政策。例如:
- 允许
a.example.com
读写domain=.example.com
的 cookie - 允许
https://a.example.com
读写http://a.example.com
的 cookie,反之亦然 - 允许
http://a.example.com:81
读写http://a.example.com:80
的 cookie
参考资料
- publicsuffix.org
- Public_Suffix_List
- Public_Suffix_List
- Top-level_domain
- Second-level_domain
- function.setcookie.php
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/03/25/%E4%BB%80%E4%B9%88%E6%98%AFPublic-Suffix-List/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2019/03/25/%E4%BB%80%E4%B9%88%E6%98%AFPublic-Suffix-List/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。