今天看了一道面试题,关于cookie中的SameSite属性,但是由于自己开发经验较少,所以并没有涉及到。所以我去查了一些文章,说一下自己对于cookie的SameSite属性的理解
一、写在头部
我们在处理CSRF攻击的时候,常常使用的解决方案是1、判断http的Referer属性,2、设置csrf token3、在http中设置自定义字段保存token。我们使用如上三种方式就可以解决CSRF的攻击。今天我们所说的cookie中的SameSite属性也是可以解决CSRF攻击的。
我们都是HTTP是没有状态的,然后为了保存状态,后来网景公司发明了cookie用来记录用户的状态信息。但是存在一个弊端,就是我们网站A的cookie可以作为第三方网站的cookie去使用。这样就造成了CSRF的漏洞SameSite就可以限制第三方cookie的使用。
二、SameSite的属性值
SameSite可以设置为三个属性strict,Lax,None,接下来我们将从三个属性分别去介绍。
属性一:strict属性:该属性表示表示完全禁止第三方cookie,也就是在跨站时,均不会携带cookie,只有当前站点的url和访问的站点的url一致时,才能携带cookie。但是我们此时想一种情况,比如说当前站点A存在一个链接,链接到gitte网站,如果我们之前已经登录了gitte网站的话,则我们再次访问该网站时应该是处于登录状态的。但是我们对当前站点cookie设置了SameSite属性为strict值,所以当前跳转链接并不会携带cookie,所以我们的信息无法得到认证,此时就需要重新登录。

Set-Cookie: CookieName=CookieValue; SameSite=strict;

属性二:Lax:该属性比strict的属性要宽松一些,其允许我们在跨站使用get请求时携带cookie

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

导航到目标网址的get请求主要包括三种,链接,预加载,get表单。具体如下所示。

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

SameSite设置为StrictLax时,就可以防止CSRF攻击了
属性三:None属性:chrome默认将Lax设置为默认值,此时我们可以更改samesite的值,将其设置为none,此时必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
下面是无效的:

Set-Cookie: widget_session=abc123; SameSite=None

下面是有效的:

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

三、使用场景
如果我们的网站是一个管理系统,或者是用户较少,经常采用输入网址的方式或者从浏览器的收藏夹中打开该网站时,我们可以使用strict。如果我们做的一些网站例如说博客,当我们在其他站点设置跳转的时候,如果我们使用strict的话,就会设置重新登录,此时我们可以将SameSite的值设置为Lax
如果我们的网站中存在一些iframe嵌套,如果使用strict和Lax就不会携带cookie进行身份验证,此时如果需要身份验证登录,任然需要再次登录。所以此时就能使用strict或Lax属性值。
四、缺点
SameSite仍然存在一些缺点:首先就是不支持子域,如果从主域跳转到子域,也不会携带cookie,此时就会重新登录。第二就是浏览器的兼容性不是很好,很多浏览器不支持该属性。

浅谈cookie中的SameSite属性相关推荐

  1. 浅谈java 中set对象属性的优雅写法

    通常我们创建一个对象,比如说Student student = new Student(),里面有一大堆乱起八糟属性,我们后面new对象进行操作时,可能涉及到set属性值,可能导致这种情况: Stud ...

  2. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

  3. php css定位到图片上,CSS_浅谈css中图片定位之所有图标放在一张图上,如今做网页为了使网站丰富多 - phpStudy...

    浅谈css中图片定位之所有图标放在一张图上 如今做网页为了使网站丰富多彩,富于表现力,往往需要应用大量的图片/图标.如何处理这些图片,使其尽量不影响网页载入,解析等速度,是一个不大不小的问题.如果你的 ...

  4. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  5. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  6. python中怎么调用函数_浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...

  7. file相对路径java_浅谈java 中文件的读取File、以及相对路径的问题

    一.对于java项目中文件的读取 1.使用system 或是 系统的properties对象 ①直接是使用 string relativelypath=system.getproperty(" ...

  8. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

    浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...

  9. 浅谈Hibernate中的几个查询

    浅谈Hibernate中的几个查询 一.load和get方法的区别 1.load在查询时,先从一级缓存中寻找与数据索引对应的实体对象,然后构建并返回一个代理对象,当我们真正使用这个代理对象的时候,这时 ...

  10. vue 给checkbox 赋值_浅谈vue中关于checkbox数据绑定v-model指令的个人理解

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: {{msg}} js里data初始化数据 new Vue({ el: "#myA ...

最新文章

  1. 【MATLAB】进阶绘图 ( colormap 颜色图矩阵分析 | 自定义 colormap 颜色图 | 生成 64 x 3 的 colormap 颜色图矩阵 )
  2. Unity学习笔记3 简易2D横版RPG游戏制作(三)
  3. 在Windows XP系统登录Active Directory域
  4. Akka STM –与STM Ref和Agent进行乒乓球比赛
  5. FreeRTOS调度器挂起与解除
  6. 第二篇 Python数据类型、字符编码、文件处理
  7. java 位与 取模_【Java基础】14、位与()操作与快速取模
  8. java基于springboot校园餐厅订餐管理系统
  9. 按键精灵html代码,最新按键精灵脚本代码大全 按键精灵命令运行方法
  10. Skyline TEP5.1.3二次开发入门——初级(四)
  11. android 集成 firebase 推送
  12. 11_JavaWeb三大组件之Filter拦截器与Listener监听器
  13. 巧妙使用css美化网页
  14. 统计学 假设检验 P值
  15. 安卓手机如何投影到电脑?手机屏幕投影到电脑
  16. 利用python绘制雪景图_彩铅 · 教程 | 教你画一张唯美雪景小图
  17. MySQL与Oracle之间的恩怨情仇
  18. linux服务器桌面连接工具下载,Linux 可视化桌面远程连接
  19. Yield Guild Games:社区更新——2022 年第四季度
  20. SCHNOKA施努卡:扁线电机定子自动绕线机厂家 全自动电机绕线机生产厂家

热门文章

  1. BZOJ 2339 卡农(组合数学)
  2. 【MMDetection3D】基于单目(Monocular)的3D目标检测入门实战
  3. [项目分享]JSP+Servlet+JDBC实现的shine网上书城
  4. linux 软防火墙 DDOS,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
  5. 商用密码产品认证-金融数据密码机
  6. 微信公众号 被关注回复和关键词回复
  7. 2021-03-29
  8. All the python knowledge that I come across
  9. c++中所有权是什么意思_产品所有权如何在现实世界中发挥作用
  10. 1×pbs缓冲液配方_pbs配方_1xpbs配方_pbs缓冲液配制