本文作者: 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) 进行许可。