热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

html5中http服务默认端口号,你真的知道Cookie吗?SameSite、Secure、HttpOnly

这两天(已经是一个多月前了)SF上面很多cookie的问题,然后还有个cookie相关的付费问答。所以咱们今天来这么一节,废话多说点,先说

这两天(已经是一个多月前了) SF 上面很多 COOKIE 的问题,然后还有个 COOKIE 相关的付费问答。

所以咱们今天来这么一节,废话多说点,先说说大体问题方向。

跨域如何携带 COOKIE

chrome 80 版本加强隐私。SameSite=Lax 为默认值,禁止了一部分场景携带 COOKIE。

5f41d6f3c80bd7a4ae4a502214b1be33.png

COOKIE

用于服务端辨别用户身份,储存在用户本地的数据。

可以解决客户端与服务端会话状态的问题,这个状态是指后端服务的状态而非通讯协议(HTTP)的状态。

COOKIE 值的存储

域名下的 COOKIE 一般来说是最大是 4KB。当然大家也不会真的放这么多。

Name / Value

存储是以 Name=Value 的形式。

Domain / Path 作用域

Domain 是限制域名,设置为 www.lilnong.top 的话,cors.lilnong.top 就获取不到了。

Path 是限制路径,如果设置为 /cors 的话,/api 下的请求就不会携带该 COOKIE。

Expires / Max-Age 有效性

Expires 是当前 COOKIE 的过期时间,默认是会话级别。

Max-Age 是当前 COOKIE 经过多少秒失效。

大于 0 是计算经过多少秒失效

等于 0 是会话级别,关闭浏览器就失效

小于 0 是指 COOKIE 无效,立即删除

Max-Age 的优先级比 Expires 更高。

HttpOnly 安全性

设置以后客户端脚本就无法通过 document.COOKIE 等方式获取。

有助于避免 XSS 攻击。

Secure 安全性

设置以后客户端只有 HTTPS 协议下才会发送给服务端。

使用 HTTPS 安全协议,可以保护 COOKIE 在浏览器和 Web 服务器间的传输过程中不被窃取和篡改。

SameSite 安全性

可以设置 COOKIE 在什么场景下会被发送。从而屏蔽跨站时发送 COOKIE,用于阻止跨站请求伪造攻击(CSRF)。

SameSite 可以设置下面三个值:

Strict 只允许同站请求携带 COOKIE。比如 lilnong.top 跳转到 www.lilnong.top/cors/,就属于同站。

Lax(chrome 80 后的默认值) 允许部分第三方请求场景 携带COOKIE。

None(chrome 80 前的默认值) 无论是否跨站都会发送 COOKIE。必须同时加上 Secure 属性,否则无效,也就是说只支持 HTTPS。

IOS 12 的 Safari 以及老版本的一些 Chrome 会把 SameSite=none 识别成 SameSite=Strict,所以服务端必须在下发 Set-COOKIE 响应头时进行 User-Agent 检测,对这些浏览器不下发 SameSite=none 属性

接下来我们来比对一下跨站的各个场景,Demo 晚点给吧。

场景类型

场景备注

Strict

Lax

None

链接

不发

预加载

不发

get 表单

不发

post 表单

不发

不发

iframe

不发

不发

AJAX

不发

不发

图片

不发

不发

script

jsonp

查看 COOKIE

开发者工具 -> application -> Storage -> COOKIEs -> 选择对应的域名

68343fdab06d8beae332431dc3b6d958.png

document.COOKIE 这里只能获取到允许获取 (HTTPOnly) 的。

去本地文件中查看。因为他是持久化的,所以存放在磁盘上。一些优化管家可以删除垃圾(缓存文件)。

设置 COOKIE

响应头中的 Set-COOKIE,这个属于最常用的方式。

Set-COOKIE: key1=value1; path=path; domain=domain; max-age=max-age-in-seconds; expires=date-in-GMTString-format; secure; httponly; SameSite=None

document.COOKIE="key=value" 这种是前端设置 COOKIE 。

概念解释

「同站 (same-site)、跨站 (cross-site)」与「第一方 (first-party)、第三方 (third-party)」这两个概念是等价的。

但是和 浏览器同源策略(SOP) 中的「同源 (same-origin)、跨域 (cross-origin)」是完全不同的概念

同站和跨站

同站是指二级域名+顶级域名,相等即可。

比如 www.lilnong.top 解析一下就是 主机名.二级域名.顶级域名,所以判断规则还是比较松的。

eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。

eTLD+1 表示,有效顶级域名+二级域名,例如 taobao.com 等。

同源和跨域

同源策略的同源是指两个 URL 的协议/主机名/端口一致。

域名

备注(请求 https://www.lilnong.top)

https://www.lilnong.top

(同源)同协议、同主机、同端口

http://www.lilnong.top

(跨域)不同协议

https://www.lilnong.top:8081

(跨域)不同端口

http://www.lilnong.top:8081

(跨域)不同协议、不同端口

https://cors.lilnong.top

(跨域)不同主机

总结

基于上面关于 COOKIE 的介绍我们可以知道,Chrome 跨站时 COOKIE 会因为 SameSite 的设置导致异常。

跨域时要携带 COOKIE 时,我们还要注意 withCredentials 的设置。然后就是清除 COOKIE,重启浏览器了。

微信公众号:前端linong

参考文章

浏览器系列之 COOKIE 和 SameSite 属性

public_suffix_list

PUBLIC SUFFIX LIST

COOKIE 的 SameSite 属性

当浏览器全面禁用三方 COOKIE

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[你真的知道 COOKIE 吗? SameSite 、 Secure 、 HttpOnly]http://www.zyiz.net/tech/detail-134232.html



推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • pyecharts 介绍
    一、pyecharts介绍ECharts,一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • css,背景,位置,y,background, ... [详细]
author-avatar
lw65112779
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有