一、关于SameSite的介绍

1.  什么是SameSite?

SameSite是浏览器请求中Set-Cookie响应头新增的一种属性,它用来标明这个 cookie 是否是“同站 cookie”,同站 cookie 只能在本域名中使用的cookie,不能作为第三方 cookie。

Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。该属性起初是由Google 起草的一份草案用来来改进 HTTP 协议的。

2. 为什么要用SameSite?

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

3. 在.Net Core3.1中如何使用SameSite?

用户想要在.Net Core3.1中使用该属性(以SameSite=None为例),则应在Startup.cs中配置以下代码:

services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.None;
});

二、使用SameSite时的具体使用

在.Net Core3.1中使用SameSite属性应注意以下几点:

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

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

(3)Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None (对旧版浏览器无效,因为旧版浏览器没有该值。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

 下面的设置无效

Set-Cookie: widget_session=abc123; SameSite=None
//浏览器警告提示

   下面的设置有效

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

 (4)Unspecified表示不指定SameSite属性。这意味着,浏览器不会将 SameSite 属性添加到Set-Cookie中并且客户端将使用其默认行为 (对旧版浏览器无效,因为旧版浏览器没有该值) 。

(5)设置Secure属性,该属性在SameSite=None的场景下使用(以SameAsRequest为例)

services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
options.Secure = CookieSecurePolicy.SameAsRequest;
});

该属性配置的枚举值有以下几个:

    SameAsRequest:如果提供 cookie 的 URI 是 HTTPS,则 cookie 仅会在后续的 HTTPS 请求上返回到服务器。 否则,如果提供 cookie 的 URI 为 HTTP,则 cookie 将在所有 HTTP 和 HTTPS 请求上返回到服务器。 此值可确保已部署服务器上的所有经过身份验证的请求使用 HTTPS,还支持将 HTTP 用于本地主机开发和不支持 HTTPS 的服务器。

    Always:Secure 始终标记为 true。 当登录页以及需要身份验证标识的所有后续页是 HTTPS 时,请使用此值。 本地开发也需要使用 HTTPS URL 来完成。

    None:Secure 未标记为 true。 当登录页为 HTTPS,但站点上的其他 HTTP 页也需要身份验证信息时,请使用此值。 不建议使用此设置,因为本地网络或无线连接中的其他计算机可能会观察到并使用随 HTTP 请求提供的身份验证信息。

 

三、遇到的问题

按照SameSite=None的解释,一是这表示允许Cookie的使用,二是必须配合Secure的设置。

那么当配置Secure的时候,按照文档的解释,配置为CookieSecurePolicy.SameAsRequest时,无论是https还是http的场景下,用户登录应该都是没有问题的(因为用户登录信息存在cookie中了)

但实际上以上我的配置并不生效,浏览器总是提示

说明没有标记secure成功(此时浏览器用不了cookie,系统总是会跳到登录页面)!

我也查了一下资料,说是这种情况Cookie 只能通过 HTTPS 协议发送,我也确实是证实了在https下是可以正常登录的。

具体是什么原因,我也不知道,也可能就是规定这么用,这里有待大神指点!!!

四、解决办法

1. 把SameSite设置为了Unspecified,此时浏览器不存在SameSite属性,就不会出现cookie的任何问题。

2. 把域名搞成https,然后SameSite=None配合Secure=SameAsRequest使用,也可以正常使用cookie

本人小白,大神勿喷!

.Net Core3.1中SameSite的使用方法、遇到的问题以及解决办法的更多相关文章

  1. AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法

    在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...

  2. IntelliJ IDEA的jsp中内置对象方法无法被解析的解决办法

    主要原因是因为缺乏依赖 可以通过添加依赖的方式 导入servlet-api.jar,jsp-api.jar,tomcat-api.jar 这三个jar即可 这三个jar在tomcat的lib目录下有 ...

  3. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...

  4. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  5. Eclipse中js文件修改后浏览器不能及时更新的解决办法

    项目中js文件修改后浏览器不能及时更新的解决办法 转载:http://www.codeweblog.com/%E9%A1%B9%E7%9B%AE%E4%B8%ADjs%E6%96%87%E4%BB%B ...

  6. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  7. .NET在IE9中页面间URL传递中文变成乱码的解决办法

     在.Net的项目中,鼠标点击查询按钮,转到查询页面,但URL中包含中文时,传到服务器端后,中文变成了乱码(只有IE9出现该问题).       尝试使用Server.UrlEncode()进行编码, ...

  8. electron-vue中使用iview 报错this. is readonly的解决办法

    title: electron-vue中使用iview 报错this. is readonly的解决办法 toc: false date: 2019-02-12 19:33:28 categories ...

  9. (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)。

    详细教程: (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)._IT打工酱的博客-CSDN博客

随机推荐

  1. php 配置主机虚拟目录(使用虚拟域名访问 127.0.0.1) 一点也不好使?????

    php 配置主机虚拟目录(使用虚拟域名访问 127.0.0.1)steps:1>打开目录  D:\xwamp\bin\apache\apache2.4.9\conf     修改文件 httpd ...

  2. JavaScript var, let, const difference All In One

    JavaScript var, let, const difference All In One js var, let, const 区别 All In One 是否存在 hoisting var ...

  3. p5.js

    p5.js p5.j​​s是一个用于创意编码的JavaScript库,其重点是使艺术家,设计师,教育者,初学者以及其他任何人都可以访问并包含所有编码! https://p5js.org/ https: ...

  4. NGK是公链吗?NGK为何会这么火?

    NGK号称区块链3.0的经典代表之作,公链底层技术开源发布,支撑百万级应用场景,集合了其他公链的优点,不仅拥有超高的TPS,军业级DPOSS共识机制,还有极高的网络确认速度和转账速度.更重要的是无需矿 ...

  5. redis的两种持久化的机制,你真的了解么?

    redis提供了两种持久化的机制 RDB和AOF机制 RDB(redis Database):RDB保存某一个时间点之前的快照数据. AOF(Append-Only File):指所有的命令行记录以r ...

  6. openwrt编译加载龙尚U9300模组上网

    硬件平台:MT7628A openwrt版本:MTK_SDK 1.添加模组信息 /build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux ...

  7. fastjson 请求dnslog

    目录 payload 利用java.net.Inet[4|6]Address 参考 Fastjson <= 1.2.47 远程命令执行漏洞利用工具及方法记录 payload rmi://.lda ...

  8. 最新版大数据平台安装部署指南,HDP-2.6.5.0,ambari-2.6.2.0

    一.服务器环境配置 1 系统要求 名称 地址 操作系统 root密码 Master1 10.1.0.30 Centos 7.7 Root@bidsum1 Master2 10.1.0.105 Cent ...

  9. FutureTask源码分析(JDK7)

    总览 A cancellable asynchronous computation. This class provides a base implementation of {@link Futur ...

  10. 七. SpringCloud服务配置

    1. SpringCloud Config概述 1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个一个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务 ...