Hostonly cookie是什么鬼?

简介: 知道cookie hostonly属性的请举手🧐

4bb94544eb02f18adbf680da0e38f99f.png


01

Cookie常见姿势、疑难梳理


目前w3c定义浏览器存放每个cookie需要包含以下字段:


cookie属性 基本描述 举例 备注
name=value cookie键值对 id=a3fWa
expires cookie过期时间 expires=Tue, 10-Jul-2013 08:30:18 GMT
secure 指定通过https请求发送cookie
Restrict access to cookies
httponly 指示是否允许通过JavaScript Document.cookie API访问cookie
Restrict access to cookies
domain 指定哪些主机可以接收cookie Domain=mozilla.org;   不设置则等于当前页面domian Define where cookies are sent
path 指示哪些路径的请求会携带cookie Path=/docs Define where cookies are sent
samesite 让服务器指定是否允许跨站请求携带cookie SameSite=Lax Define where cookies are sent


cookie属性之间用;连接;多个cookie设置,产生多次Set-Cookieheader


HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: X-BAT-FullTicketId=TGT-969171-******;domain=bat.com; path=/; samesite=none; httponly
[page content]


第一方cookie、第三方cookie:


cookie与domian密切相关,如果cookie的domain属性与你当前查看的页面的domain相同,cookie被称为第一方cookie;


如果不同,则称为第三方cookie, 第三方cookie通常用于广告和用户行为追踪。


以上属性决定了后续请求能否正常访问cookie并携带cookie, 其中与cookie安全密切相关的三个属性:


  • secure
  • httponly
  • samesite


这三个cookie属性也是单点登录、跨域访问常遇到的阻碍的技术突破点。


02

HostOnly cookie是什么鬼?


今天介绍一个不常见的cookie的属性hostonly,但是也曾给码甲哥造成了一点阻碍。


① 这是一个不可手动修改的cookie属性,类似 Sec-Fetch-、 Origin标头,都是浏览器自动判断并赋值。


② 判断逻辑:


如果domain-attribute非空:如果规范化之后的request-host不匹配domain-attribute  
中的域名,那么完全忽略掉cookie并且终止这些步骤;否则,将cookie的host-only-flag  
设定为false,并且将cookie的domain设定为domain-attribute。    
否则:将cookie的host-only-flag设定为true,并且将domain设定为规范化之后的request-host。


03

爬坑经历


我当时在做一个 单点登录的时候,原意图是: 设置cookie的domain属性为父域名,向子域名请求时能自动携带cookie, 但事与愿违,子域服务器始终收不到cookie。


我坚信:


成熟的技术一定会有成熟的诊断姿势!


成熟的技术一定会有成熟的诊断姿势!


成熟的技术一定会有成熟的诊断姿势!


Chrome浏览器开发者工具显示:


疑点1:我的这个cookie在请求子域时被滤除了。


9f16ec94db510f7da88860eba915d77b.png


鼠标悬停黑色感叹号,显示我这是一个hostonly cookie, 这就奇怪了,这个cookie的domain值也是正常的,但是多了一个hostonly属性。


疑点2:在原种植cookie的响应流Set-Cookie header,这个cookie的domain键值对消失了。


围观我设置Cookie的错误代码:


bf82d0dfae52e9a0f1cceff1c8d96f4d.png


结合hostonly的判断逻辑, 我大概知道了。


ebbb84f3c19a0c6e13399ca3ba6bbf62.png


大概就是我偷懒使用了单点登录的回调地址'bat.com/home'作为domain属性值,以为能自动解析出正常的domain。


实际上经历了【响应流中的Set-Cookie header 忽略cookie domain属性】---> 【hostonly判断逻辑】, 事情已经失控了,解决问题的办法也很明确,设置正确合法的domain属性值,就不会出现后续的幺蛾子,上线验证有效。


相关文章
|
数据库 OceanBase
"deployed" 状态
"deployed" 状态
188 1
|
Linux Python 开发工具
Linux编译安装python2.7.5的步骤
Linux编译安装python2.7.5的步骤 发布时间:2014-03-27 来源:服务器之家 1. 下载python2.7.5,保存到 /data/qtongmon/software http://www.
2234 0
|
Java Linux 网络安全
2021 最新 IntelliJ IDEA配置 远程Docker容器 编写Dockerfile文件 步骤演示(图文版)
目录 一. 配置远程SFTP 1.打开IDEA 2.建个springboot项目 2.1 选择tools 2.2 选择如图所示位置 2.4 出现如下界面,点击三个... 2.5 选择SFTP 2.6 作如下配置,然后点击OK 2.7弹出如下界面,点击见图所示的三个... 2.8 点击加号+ 2.9 配置远程连接信息 2.10测试连接:弹出的界面点击 : 是 2.11 根据需求选择,我这里选择root目录 2.12连接完成 3 右键可以新建文件和目录 3.1 点击小箭头提交数据 二. IDEA配置 Linux 命令行窗口 第一步,点击 tools 第二步; 选择这个ssh 第三步: 连接完成
1073 0
2021 最新 IntelliJ IDEA配置 远程Docker容器 编写Dockerfile文件 步骤演示(图文版)
|
运维 API 对象存储
阿里云OSS上传图片不能打开的解决办法
  最近项目需要把附件部署到阿里云oss,集成过程中发现上传的图片不能直接打开预览,只能下载到本地保存。   解决办法:设置ContentType   var endpoint="阿里云OSS EndPoint";   // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
4197 0
|
9月前
|
运维 安全 Cloud Native
阿里云云安全中心全面解析
阿里云云安全中心作为一款集持续监测、深度防御、全面分析、快速响应能力于一体的云上安全管理平台,为企业提供了全方位的安全保障。本文将详细介绍阿里云云安全中心的功能、应用场景、收费标准以及购买建议,帮助您更好地了解和利用这一强大的安全工具。
阿里云云安全中心全面解析
|
机器学习/深度学习 供应链 TensorFlow
使用Python实现深度学习模型:智能物流与供应链管理
【8月更文挑战第1天】 使用Python实现深度学习模型:智能物流与供应链管理
503 2
使用Python实现深度学习模型:智能物流与供应链管理
|
12月前
|
数据挖掘 索引 Python
Pandas中的Pivot:数据重塑的艺术
Pandas中的Pivot:数据重塑的艺术
313 0
|
存储 JSON 关系型数据库
MySQL与JSON的邂逅:开启大数据分析新纪元
MySQL与JSON的邂逅:开启大数据分析新纪元
|
存储 人工智能 弹性计算
阿里云618:补贴5个亿,200余款云产品折上再折
阿里云618:补贴5个亿,200余款云产品折上再折
735 1
|
数据采集 人工智能 Python
【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)
【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)
522 1