具有不安全、不正确或缺少SameSite属性的Cookie

1、概述

最近,用APPSCAN对网站进行扫描,结果报了一个“具有不安全、不正确或缺少SameSite属性的Cookie”的漏洞。
在这里插入图片描述

2、分析

2.1、Samesite属性是个啥?

为了从源头上解决CSRF(跨站请求伪造)攻击,Google起草了一份草案来改进HTTP协议,那就是为Set-Cookie响应头新增Samesite属性,它用来标明这个 Cookie是个“同站 Cookie”,同站Cookie只能作为第一方Cookie,不能作为第三方Cookie,Samesite 有两个属性值,分别是 StrictLaxNone

2.2、Strict

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

这个规则过于严格,可能造成非常不好的用户体验。
在这里插入图片描述

aaa.com设置了如下Cookie:

Set-Cookie: CookieName=123456; SameSite=Strict;

我们在bbb.com下发起对aaa.com的任意请求,CookieName这个Cookie不会被包含在Cookie请求头中。就好像淘宝网站用来识别用户登录与否的 Cookie 被设置成了 Samesite=Strict,那么用户从百度搜索页面甚至天猫页面的链接点击进入淘宝后,淘宝都不会是登录状态,因为淘宝的服务器不会接受到那个 Cookie,其它网站发起的对淘宝的任意请求都不会带上那个 Cookie。

2.3、Lax

Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。

请求类型示例正常情况Lax
链接<a href="…"></a>发送Cookie发送Cookie
预加载<link rel=“prerender” href="…">发送Cookie发送Cookie
GET表单<form method=“GET” action="…">发送Cookie发送Cookie
POST表单<form method=“POST” action="…">发送Cookie不发送Cookie
iframe<iframe src="…"></iframe>发送Cookie不发送Cookie
AJAX$.get("…")发送Cookie不发送Cookie
Image<img src="…">发送Cookie不发送Cookie

设置了Strict=Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。

在这里插入图片描述
aaa.com设置了如下Cookie:

Set-Cookie: CookieName=123456; SameSite=Lax;

当用户从bbb.com点击链接进入aaa.com时,CookieName这个 Cookie 会被包含在 Cookie 请求头中,也就是说用户在不同网站之间通过链接跳转是不受影响了,但假如这个请求是从 bbb.com 发起的对 aaa.com 的异步请求,或者页面跳转是通过表单的 post 提交触发的,则CookieName也不会发送。

2.4、None

Chrome 80.0将SameSite的默认值设为Lax,。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

下面的设置无效:

Set-Cookie: widget_session=abc123; SameSite=None

下面的设置有效

Set-Cookie: widget_session=abc123; SameSite=None; Secure

3、修复

PHP设置:

从PHP7.3开始,setcookie函数支持数组设置

setcookie($name, $value, [
    'expires' => time() + 86400,
    'path' => '/',
    'domain' => 'domain.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None',
]);

PHP7.3一下,通过hack方式实现

setcookie('sessionKey', $sessionKey, $expired, '/; secure; SameSite=none;');

Nginx设置:

location ^/abc/ {
    proxy_cookie_path / "/; secure; SameSite=None";
}

Sprintboot设置: 参考:https://juejin.cn/post/6867050293595799560

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
具有缺失、不一致或矛盾属性cookie 是指在网站或应用程序中处理 cookie 过程中出现问题的情况。一般来说,cookie 是由网站发送给用户浏览器的小型文本文件,用于存储用户在网站上的偏好设置、登录信息和其他相关数据。然而,有时候 cookie属性可能存在问题,导致其出现缺失、不一致或矛盾的情况。 缺失属性cookie 可能是没有包含必要的信息,例如缺少必要的键值对或没有设置过期时间。这可能导致网站无法正确识别用户,或者无法保存用户的登录状态和偏好设置。 不一致属性cookie 是指在同一个网站的不同页面或同一个会话中,同一个 cookie属性值不一致的情况。例如,在浏览同一个网站的不同页面时,可能会发现同一个 cookie 的值在不同页面中不一样,这可能会影响网站的正确功能。 矛盾属性cookie 是指同一个网站发送给用户浏览器的多个 cookie,它们之间的属性相互矛盾或冲突。例如,一个网站可能发送了多个设置了相同名称但不同值的 cookie,这可能导致网站无法正确解析这些 cookie,并可能对网站功能产生影响。 总之,具有缺失、不一致或矛盾属性cookie 可能会导致网站无法正确识别用户、保存用户的登录状态和偏好设置,或影响网站功能的正常运行。为了解决这些问题,网站开发人员需要确保发送的 cookie 包含必要的属性和值,并保持这些 cookie 在同一个网站或会话中的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值