什么是Public Suffix List


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/25/%E4%BB%80%E4%B9%88%E6%98%AFPublic-Suffix-List/

摘要

本文主要讲述了:

  1. 背景
  2. cookie
  3. 什么是 Public Suffix List
  4. 作用

正文

背景

域名可分为:

  • 根域名(.
  • 顶级域名(一级域名)
  • 二级域名
  • 三级域名
  • ……

顶级域名被域名注册商持有。例如:comcn

用户只能持有顶级域名的子域名,即二级域名。例如:example.comcom的二级域名

当用户持有了二级域名之后,用户有两个选择:

  1. 子域名私有
  2. 子域名公共

示例:

  • example.com的子域名私有。example.com的持有人可以随意注册a.example.comb.example.com等三级域名,且这些子域名都为example.com持有
  • github.io的子域名公共。a.github.iob.github.io属于两个不同的持有者,且这些子域名都不为github.io持有

特别注意:以 Chrome 浏览器中最终存储的 cookie 的domain为准

  • a.github.io想要读写domain=.github.io的 cookie 时,因为github.ioa.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.ioa.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(公共后缀列表)。此列表列举了开放子域名注册的域名。例如:cncom.cn

作用

  • 区分同站(第一方)和跨站(第三方)
  • 和同源政策一起阻止浏览器端的 JavaScript 读写跨站 cookie,阻止服务器端的响应头写入跨站 cookie

示例:

  • example.com的子域名私有。a.example.comb.example.comexample.com属于同站
  • github.io的子域名公共。a.github.iob.github.iogithub.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

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/25/%E4%BB%80%E4%B9%88%E6%98%AFPublic-Suffix-List/


本文对你有帮助?请支持我


支付宝
微信