面试复盘之cookie属性
今天某电商网站终面问到cookies的属性问题,有点不知所措,因为cookies自己应用蛮少的 在这里进行cookies的复盘 cookies的作用 会话状态管理(如用户登录、购物车、游戏分数或其他的游戏分数、其他需要记录的信息) 个性化设置,程序主题色 浏览器跟踪(如跟踪用户行为) 服务端 NodeJS设置方式 set-cookies: 会话区的cookies是简单的cookies: 随着浏览器的关闭而自动删除,仅在会话期有效,会话区的cookies不需要设置Expires(过期时间)或者Max-Age(有效期),有些浏览器提供了会话恢复功能,在会话关闭后也不会删除相关的cookies,cookies就相当于无限期延长 持久化的cookie 当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。 一般需要设置max-age(有效期)或者expire(过期时间) 两个属性可以确保cookie被意外的参与者或者脚本访问 JavaScript 标记为Secure属性的只应该通过HTTPS协议加密过的请求发送,发送给服务端,因此可以预防中间者的攻击,Secure也无法保证确实安全,cookie有固有的问题,例如可以从客户端硬盘读取 Secure HttpOnly domian指定了那些主机可以接受cookie,不指定,则默认为origin(不包含子域) domain如果指定了域,那么其包含子域,因为指定domain的限制更少一些, 当前大多数浏览器遵循 RFC 6265,设置 Domain 时 不需要加前导点。浏览器不遵循该规范,则需要加前导点,例如: 例 /docus/html /docus/secure 决定了主机下的那些路径可以接受cookie(该url路径存在于URL),以字符%x2F作为路径分隔符 例如以下规则 - SameSite cookie允许服务器要求某个cookie在跨站时不会被发送 Strict浏览器只在访问相同站点发送cookie,从而可以阻止跨站请求伪造攻击 通过 JavaScript 创建的 Cookie 不能包含 HttpOnly 标志。复盘
创建cookies
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry复制代码
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);复制代码
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;复制代码
Document.cookie
API 无法访问带有 HttpOnly
属性的cookieHttpOnly
类型的 Cookie 用于阻止了JavaScript 对其的访问性而能在一定程度上缓解此类攻击。从 Chrome 52 和 Firefox 52 开始,不安全的站点(`http:`)无法使用Cookie的 `Secure` 标记复制代码
domain
属性和Path
属性决定了其作用域Domain=.mozilla.org
Path
属性docus
其实以下都可以匹配SameSite
None
浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写。Lax
。 与 Strict
类似,但用户从外部站点导航至URL时(例如通过链接)除外。 在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者 frames 的调用,但只有当用户从外部站点导航到URL时才会发送。如 link 链接
文章分类
作者:KerryLee
链接:https://juejin.cn/post/7018141075860619294