Cookie - SameSite

Domain / Path 作用域

Domain 是限制域名,设置为 www.lilnong.top 的话,cors.lilnong.top 就获取不到了。
Path 是限制路径,如果设置为 /cors 的话,/api 下的请求就不会携带该 cookie

Expires / Max-Age 有效性

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

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

  1. 大于 0 是计算经过多少秒失效
  2. 等于 0 是会话级别,关闭浏览器就失效
  3. 小于 0 是指 cookie 无效,立即删除

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

HttpOnly 安全性

设置以后客户端脚本就无法通过 document.cookie 等方式获取。
有助于避免 XSS 攻击。

Secure 安全性

设置以后客户端只有 HTTPS 协议下才会发送给服务端。
使用 HTTPS 安全协议,可以保护 Cookie 在浏览器和 Web 服务器间的传输过程中不被窃取和篡改

SameSite 安全性

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

SameSite 可以设置下面三个值:

  1. Strict 只允许同站请求携带 Cookie。比如 lilnong.top 跳转到 www.lilnong.top/cors/,就属于同站。
  2. Laxchrome 80 后的默认值) 允许部分第三方请求场景 携带Cookie。
  3. Nonechrome 80 前的默认值) 无论是否跨站都会发送 Cookie。必须同时加上 Secure 属性,否则无效,也就是说只支持 HTTPS。

    IOS 12 的 Safari 以及老版本的一些 Chrome 会把 SameSite=none 识别成 SameSite=Strict,所以服务端必须在下发 Set-Cookie 响应头时进行 User-Agent 检测,对这些浏览器不下发 SameSite=none 属性
场景类型场景备注StrictLaxNone
链接<a href>不发
预加载<link rel="prerender">不发
get 表单<form method="get">不发
post 表单<form method="post">不发不发
iframe<iframe src>不发不发
AJAX<a href>不发不发
图片<img src>不发不发
scriptjsonp   

设置 Cookie

  1. 响应头中的 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
  2. document.cookie="key=value" 这种是前端设置 cookie 。

概念解释

「 同站 (same-site)、跨站 (cross-site)」与「 第一方 (first-party)、第三方 (third-party)」这两个概念是等价的。
但是和 浏览器同源策略(SOP) 中的「 同源 (same-origin)、跨域 (cross-origin)」是完全不同的概念

同站和跨站

同站是指二级域名+顶级域名,相等即可。
比如 www.lilnong.top 解析一下就是 主机名.二级域名.顶级域名,所以判断规则还是比较松的。


CSRF 攻击是什么?

Cookie 往往用来存储用户的身份信息,恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这就是 CSRF 攻击。

举例来说,用户登陆了银行网站your-bank.com,银行服务器发来了一个 Cookie。


Set-Cookie:id=a3fWa;

用户后来又访问了恶意网站malicious.com,上面有一个表单。


<form action="your-bank.com/transfer" method="POST">
  ...
</form>

用户一旦被诱骗发送这个表单,银行网站就会收到带有正确 Cookie 的请求。为了防止这种攻击,表单一般都带有一个随机 token,告诉服务器这是真实请求。


<form action="your-bank.com/transfer" method="POST">
  <input type="hidden" name="token" value="dad3weg34">
  ...
</form>

这种第三方网站引导发出的 Cookie,就称为第三方 Cookie。它除了用于 CSRF 攻击,还可以用于用户追踪。

比如,Facebook 在第三方网站插入一张看不见的图片。


<img src="facebook.com" style="visibility:hidden;">

浏览器加载上面代码时,就会向 Facebook 发出带有 Cookie 的请求,从而 Facebook 就会知道你是谁,访问了什么网站。


https://copyfuture.com/blogs-details/20200511090348563odb9fjlpsp1xp3z

http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值