深入解析Cookie机制:从操作实践到安全属性详解

cookie介绍

当你首次登录网站时,你会输入用户名和密码。在后台,网站的服务器验证这些凭据是否正确。一旦确认你的身份无误,服务器就会创建一个Cookie,并将其发送到你的浏览器。这了解Cookie登录:原理、实践与安全指南个Cookie包含了一个独特的身份验证令牌,它代表了你的登录会话。而这个包含用户一些信息的小型数据片段,就是Cookie。

跨站和跨域

两个Url的一级域名与二级域名相同就属于同站

两个Url的协议或是域名或端口号不同那就跨域了,跨域判断比跨站判断严格很多。

Cookie操作

再浏览器中输入document.cookie就可以得到部分的cookie信息,获取到的是一个字符串,使用split(';')将它及逆行切割,它的序列化方式是k1=v1;k2=v2;k3=v3

而浏览器中实际存储的可不止这四条cookie只要httpOnly被打上了钩那么使用JS是无法获取到这个cookie的,这种cookie只能用浏览器和服务端来进行操作,通常做种cookie使用来存储一些与用户身份信息或是安全相关凭证。

在浏览器中增加一条cookie的值也是使用document.cookie来进行操作

而要变更一条cookie的值是与新增是一样的,只要将需要变更的key值进行重新赋值就可以了,而删除操作就需要将cookie的key值设为空,同时将max-age=-1

代码执行后cookie面板的对应的这条cookie就会消失

Cookie的属性

key&value

每个cookie都有它对应的键名和值,获取cookie对应值的时候,可以把document.cookie返回的字符串使用split(';')进行分割分割后每条cookie都是kv对,把他们存入对象之后就可以比较方便的获取了使用了

domain

domain是cookie能做作用的主机地址,domain里面的东西非常多,首先domain不携带主机和端口,这个地方端口不同。协议不同都不会影响cookie,但是cookie的部分属性只有在HTTPS下才能生效

我们在https://a.com中写下了四个cookie

打开http://a.com这四个cookie依然存在,当把端口号改成1234的时候http://a.com:1234这四个cookie还是存在。这就是cookie的特性不区分协议和端口。

细心的同学已经发现了,有的domain最前面有一个点,有的没有。有点的domain就表示这个cookie可以作用于当前域及其子域。如果我们在新增cookie的时候没有带上domain,那么这个cookie只能作用于当前域。 但是当我们设置domain=a.com它的作用域却是.a.com,当我们设置domain=.a.com时它的作用域也是.a.com这点要记好。

最后就是在子域里面可以给父域设cookie,那么我们可以在a.com中获取到这个cookie,也可以在b.a.com获取到这个cookie,因为这个cookie是作用于a.com及其子域的。但是我们是不能从父域给子域设置domain,也不能跨域设置domain。

Path

path用来指定URL的路径,比如在a.com/a设置一个cookie这个cookie的path是/a,那么在a.com/a/b这个页面就也有这个cookie而在a.com/b这个页面就没有。

Expires & max-age

expires在指定时间失效 max-age多少秒之后失效 这两个属性同时存在时,max-age的优先级更高 max- age=- 1 删除cookie,0也是删除 max-age=60 则60秒之后删除cookie

当一个cookie既不设置expires又不设置max-age,那么这个cookie就是一个会话cookie,当浏览器被关闭时,这个cookie将会被清除。

httpOnly

httpOnly时和cookie安全性紧密相关的属性,前面说到过h't't'pOnly被打上了钩那么使用JS是无法获取到这个cookie的,这种cookie只能用浏览器和服务端来进行操作的。带有htppOnly的cookie只能由服务端通过响应标头中的set-cookie种在浏览器上面,js是无法获取到的。

Secure

secure这个属性告诉浏览器这个cookie只能用https协议传输,如果服务端的响应的从cookie中有secure这个属性,而当前页面的协议是http的,那么这个浏览器会忽略掉这个cookie。

这里我们在https协议的页面下创建一个带有secure的cookie,当我们向https://a.com发起请求的时候就会携带上这个cookie,而当向http://a.com发起请求的时候就不会有这个cookie的

Samesite

samesite属性可以限制跨站请求时cookie的发送。samesite的值是none,lax或者strict中的一个:

None不论是否跨站都发送cookie,虽然None是约束性最弱的,但是只有它是通过https协议进行传输时,浏览器才认为它有效,另外它必须要添加secure属性,不然将无法保存在浏览器上

Strict跨站不带cookie

Lax默认值,部分情况下携带cookie。具体情况如下表

相关推荐
滚雪球~37 分钟前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语39 分钟前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport40 分钟前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap
brrdg_sefg42 分钟前
WEB 漏洞 - 文件包含漏洞深度解析
前端·网络·安全
胡西风_foxww1 小时前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
m0_748254881 小时前
vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0
前端·vue.js·elementui
ThisIsClark1 小时前
【后端面试总结】深入解析进程和线程的区别
java·jvm·面试
星就前端叭2 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc
m0_748234522 小时前
前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)
前端·webpack·node.js
Web阿成2 小时前
3.学习webpack配置 尝试打包ts文件
前端·学习·webpack·typescript