浅谈cookie中的SameSite属性
今天看了一道面试题,关于cookie
中的SameSite
属性,但是由于自己开发经验较少,所以并没有涉及到。所以我去查了一些文章,说一下自己对于cookie的SameSite属性的理解
。
一、写在头部
我们在处理CSRF攻击
的时候,常常使用的解决方案是1、判断http的Referer属性
,2、设置csrf token
,3、在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
设置为Strict
和Lax
时,就可以防止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属性相关推荐
- 浅谈java 中set对象属性的优雅写法
通常我们创建一个对象,比如说Student student = new Student(),里面有一大堆乱起八糟属性,我们后面new对象进行操作时,可能涉及到set属性值,可能导致这种情况: Stud ...
- 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置
声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...
- php css定位到图片上,CSS_浅谈css中图片定位之所有图标放在一张图上,如今做网页为了使网站丰富多 - phpStudy...
浅谈css中图片定位之所有图标放在一张图上 如今做网页为了使网站丰富多彩,富于表现力,往往需要应用大量的图片/图标.如何处理这些图片,使其尽量不影响网页载入,解析等速度,是一个不大不小的问题.如果你的 ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
- python中怎么调用函数_浅谈Python中函数的定义及其调用方法
一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...
- file相对路径java_浅谈java 中文件的读取File、以及相对路径的问题
一.对于java项目中文件的读取 1.使用system 或是 系统的properties对象 ①直接是使用 string relativelypath=system.getproperty(" ...
- python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题
浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...
- 浅谈Hibernate中的几个查询
浅谈Hibernate中的几个查询 一.load和get方法的区别 1.load在查询时,先从一级缓存中寻找与数据索引对应的实体对象,然后构建并返回一个代理对象,当我们真正使用这个代理对象的时候,这时 ...
- vue 给checkbox 赋值_浅谈vue中关于checkbox数据绑定v-model指令的个人理解
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: {{msg}} js里data初始化数据 new Vue({ el: "#myA ...
最新文章
- 【MATLAB】进阶绘图 ( colormap 颜色图矩阵分析 | 自定义 colormap 颜色图 | 生成 64 x 3 的 colormap 颜色图矩阵 )
- Unity学习笔记3 简易2D横版RPG游戏制作(三)
- 在Windows XP系统登录Active Directory域
- Akka STM –与STM Ref和Agent进行乒乓球比赛
- FreeRTOS调度器挂起与解除
- 第二篇 Python数据类型、字符编码、文件处理
- java 位与 取模_【Java基础】14、位与()操作与快速取模
- java基于springboot校园餐厅订餐管理系统
- 按键精灵html代码,最新按键精灵脚本代码大全 按键精灵命令运行方法
- Skyline TEP5.1.3二次开发入门——初级(四)
- android 集成 firebase 推送
- 11_JavaWeb三大组件之Filter拦截器与Listener监听器
- 巧妙使用css美化网页
- 统计学 假设检验 P值
- 安卓手机如何投影到电脑?手机屏幕投影到电脑
- 利用python绘制雪景图_彩铅 · 教程 | 教你画一张唯美雪景小图
- MySQL与Oracle之间的恩怨情仇
- linux服务器桌面连接工具下载,Linux 可视化桌面远程连接
- Yield Guild Games:社区更新——2022 年第四季度
- SCHNOKA施努卡:扁线电机定子自动绕线机厂家 全自动电机绕线机生产厂家
热门文章
- BZOJ 2339 卡农(组合数学)
- 【MMDetection3D】基于单目(Monocular)的3D目标检测入门实战
- [项目分享]JSP+Servlet+JDBC实现的shine网上书城
- linux 软防火墙 DDOS,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
- 商用密码产品认证-金融数据密码机
- 微信公众号 被关注回复和关键词回复
- 2021-03-29
- All the python knowledge that I come across
- c++中所有权是什么意思_产品所有权如何在现实世界中发挥作用
- 1×pbs缓冲液配方_pbs配方_1xpbs配方_pbs缓冲液配制