CSRF 攻击 与 SameSite 属性

1. CSRF 攻击介绍

当用户登录银行网站A(例如 bank.com)时,其浏览器会存储认证信息。恶意网站B(例如 attacker.com)可能会包含一个自动提交的请求,模拟用户在银行网站A上的操作,如转账。如果用户被诱骗访问了这个恶意页面,银行网站A将收到带有认证信息的转账请求,从而导致用户的财产损失。

常见的处理 CSRF 攻击的方式主要有:CSRF Token(常存储于 session 中)和配置Cookies的 SameSite 属性

2. SameSite

SameSite 属性控制 Cookie 是否随跨站请求一起发送,有助于防范跨站请求伪造攻击(CSRF)。

关于 SameSite 的定义,当「URL 协议」和「域名」一致时,即为 SameSite,子域名以及端口可以不一致。

Similarly, cookies for a given host are shared across all the ports on that host, even though the usual “same-origin policy” used by web browsers isolates content retrieved via different ports. --rfc6265

URLDescriptionsame-sitesame-origin
http://www.example.orgIdentical URL
http://www.example.org:80Identical URL (implicit port)
http://www.example.org:8080Different port
http://sub.example.orgDifferent subdomain
https://www.example.orgDifferent scheme
http://www.example.comDifferent TLD

2.1. SameSite 的三种属性

服务器返回 set-cookie HTTP 响应标头,以设置 cookie 属性,

根据 Fetch 规范,Set-Cookie 是一个禁止修改的响应标头,浏览器会阻止前端 JavaScript 代码访问该标头。

  • SameSite=Strict:在 Strict 模式下,任何第三方请求都不会发送 Cookie。即使用户点击链接导航到目标网站,请求也不会携带 Cookie。
  • SameSite=Lax:在 Lax 模式下,只有在用户通过顶级导航(如点击链接或通过地址栏输入 URL)访问站点时,Cookie 才会被发送。因此,这种情况下请求会携带 Cookie。
  • SameSite=None:在 None 模式下,Cookie 会在任何请求中发送,但需要设置 Secure 属性以确保安全性。

2.2. SameSite Cookie 发送情况对比表

同站跨站,对比的是顶级域名,即浏览器地址栏中的域名。

请求方请求类型示例SameSite=StrictSameSite=LaxSameSite=None
同站直接在地址栏输入URL并访问
同站通过浏览器刷新页面
同站<a> 链接
同站iframe
同站AJAX/fetch请求
跨站<a> 链接<a href="..."></a>
跨站预加载<link rel="prerender"href="..."/>
跨站发送表单(GET)<form method="GET"action="...">
跨站发送表单(POST)<form method="POST"action="...">
跨站跨站AJAX/fetch请求$.get("...")
跨站iframe<iframe src="..."></iframe>
跨站网站图片链接<img src="...">

2.3. SameSite Cookie 优缺点对比表

特性SameSite=StrictSameSite=LaxSameSite=None
优点- 提供极强的CSRF攻击防护
- 几乎完全阻止CSRF攻击
- 提供中等强度的CSRF攻击防护
- 用户可以通过链接访问网站并保持登录状态,改善用户体验
- 总是发送cookie,适用于需要跨站发送cookie的情况
- 支持跨站表单提交、跨站AJAX请求、跨站iframe嵌入等
缺点- 用户点击外部链接访问网站时不会自动登录
- 一些认证机制(如OpenID Connect with response_mode=form_post)无法使用
- 不能用于跨站iframe嵌入
- 不能用于跨站AJAX请求
- 安全性不如SameSite=Strict
- 一些认证机制(如OpenID Connect with response_mode=form_post)无法使用
- 不能用于跨站iframe嵌入
- 不能用于跨站AJAX请求
- 不提供任何CSRF攻击防护
- 需要设置Secure属性
- 可能存在旧浏览器兼容性问题,需特殊处理

3. 参考

  1. Understanding SameSite cookies: https://andrewlock.net/understanding-samesite-cookies/
  2. Set-Cookie - HTTP | MDN: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie
  3. Cookie 的 SameSite 属性 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html
  4. security - Are HTTP cookies port specific? - Stack Overflow: https://stackoverflow.com/questions/1612177/are-http-cookies-port-specific
  5. RFC 6265: HTTP State Management Mechanism: https://www.rfc-editor.org/rfc/rfc6265

  • 本作品采用 署名-相同方式共享 4.0 国际(CC BY-SA 4.0 DEED) 许可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GSCoolink基石 GSV6127E HDMI2.0/Type-C/DP1.4 转MIPI 可替代CH7515和CS5511

GSCoolink基石 GSV6127E HDMI2.0/Type-C/DP1.4 转MIPI 可替代CH7515和CS5511&#xff0c;适用于PC一体机。 Gscoolink GSV6127E是一款高性能、低功耗的Type-C/DisplayPort 1.4到MIPI CSI-2/LVDS/TTL转换器。使用双端口MIPI接口&#xff0c;可以使用MIPI接口传输真正的4K60 444…

【Linux】Zookeeper 部署

Zookeeper 搭建方式 单机模式&#xff1a;Zookeeper只运行在一台服务器上&#xff0c;适合测试环境伪集群模式&#xff1a;就是在一台物理机上运行多个Zookeeper 实例&#xff1b;集群模式&#xff1a;Zookeeper运行于一个集群上&#xff0c;适合生产环境&#xff0c;这个计算…

Java程序设计:spring boot(13)——全局异常与事务控制

1 Spring Boot 事务支持 在使⽤ Jdbc 作为数据库访问技术时&#xff0c;Spring Boot框架定义了基于jdbc的PlatformTransaction Manager 接⼝的实现 DataSourceTransactionManager&#xff0c;并在 Spring Boot 应⽤ 启动时⾃动进⾏配置。如果使⽤ jpa 的话 Spring Boot 同样提供…

00 硬件、嵌入式硬件知识-目录篇

写一下想说的话&#xff1a; 博主本双非、研究生顶2&#xff1b; 做了一两年的fpga&#xff0c;看到师兄师姐的offer情况&#xff0c;结合一下想去的城市&#xff0c;以及个人兴趣 自身情况等等&#xff0c;遂转纯硬件、嵌入式硬件。 本专栏旨在记录博主备战秋招不到一年的时间…

vue2和vue3在html中引用组件component方式不一样

我的vue版本是&#xff1a;20.17.0 一、在HTML中&#xff0c;引用组件格式区别。 vue2引用组件可以是file.vue格式&#xff0c;需要导入&#xff1a;<script src"https://unpkg.com/http-vue-loader"></script>才可以识别vue格式。 vue3引用组件格式是…

Python字典到JSON字符串的转换

在Python中&#xff0c;字典是一种非常常见的数据结构。它可以轻松地转换为JSON字符串&#xff0c;从而实现了将Python对象序列化为JSON格式的目的。本文将详细介绍如何将Python字典转换为JSON字符串。 1. Python字典的基本概念 在Python中&#xff0c;字典是一种无序的键值对…

量子容错计算

基本思想 容错量子计算的基本想法是&#xff0c;在合理编码后的量子态上直接量子计算&#xff0c;以至于不完全需要解码操作。假设有一个简单的量子电路&#xff0c;但不幸的是噪声影响着这个电路的每一个元件&#xff0c;包括量子态的制备、量子逻辑门、对输出的测量&#x…

Redis 哨兵 总结

前言 相关系列 《Redis & 目录》《Redis & 哨兵 & 源码》《Redis & 哨兵 & 总结》《Redis & 哨兵 & 问题》 参考文献 《Redis的主从复制和哨兵机制详解》《Redis中的哨兵&#xff08;Sentinel&#xff09;》《【Redis实现系列】Sentinel自动故…

怎样取消默认逐份打印

如果你遇到打印任务不完成&#xff0c;无法打印下一张的情况&#xff0c;可以尝试下面步骤解决问题&#xff1a; 取消勾选 逐份打印 1、检查打印机状态&#xff1a; 确保打印机与电脑处于联机状态&#xff0c;指示灯应常亮&#xff1b; 2、取消“逐份打印”&#xff1a; 打…

音视频如何轻松转换?来看看这四款工具:

在这个数据普及的时代&#xff0c;视频图片文字等形式的记录&#xff0c;变成了我们习以为常&#xff0c;而传统的文字往往具有搞得信息密度和更强的传播力&#xff1b;我是经常需要将视频内容转换成文&#xff0c;深有体会当下时代将视频内容转化为文字的需求越来越旺盛了&…

highcharts的datalabels标签格式化

Highcharts的数据标签格式化 代码如下 plotOptions: {series: {dataLabels: {enabled: true,format: {y:.2f} mm}} },y就是当前数据点的值&#xff0c;.2f代表2位小数&#xff0c;效果如下图

卡尔曼滤波器-Kalmen Filter-1

卡尔曼滤波器是一种最优递归数据处理算法&#xff0c;它更像是一种观测器&#xff0c;而不是一般意义上的滤波器。卡曼滤波器的应用非常广泛&#xff0c;尤其是在导航当中。它的广泛应用是因为我们生活的世界中存在着大量的不确定性&#xff0c;当我们去描述一个系统的时候&…

Python OpenCV图像复原

文章目录 一、理论背景二、去噪方法三、具体实现步骤四、模糊处理&#xff08;可选&#xff09;五、注意事项 Python OpenCV图像复原是一个涉及去除噪声、模糊等失真的过程&#xff0c;旨在恢复图像的原始质量。以下是一个详细的案例教程&#xff0c;包括理论背景和具体实现步骤…

使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)

准备 Docker 环境 Linux # 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker # 安装 docker-compose curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-

YOLOV8 |搞懂检测头

代码: yaml结构的最后一层&#xff0c;接了前面三个层的&#xff0c;有3个检测头&#xff1a; # YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 12- [-1, 1, nn.Upsam…

池化层笔记

池化层 文章目录 池化层二维池化层超参数池化层的分类代码实现填充和步幅 多个通道 总结 卷积对位置敏感&#xff0c;可以检测垂直边缘。需要有一定程度的平移不变性&#xff0c;而在平时图片的拍摄&#xff0c;会因为图片的照明&#xff0c;物体位置&#xff0c;比例&#xff…

大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

mysql 5.7实现组内排序(连续xx天数)

需求&#xff1a;查询出连续登录的用户及其连续登录的天数 我先说一下思路&#xff1a;要实现连续登录的判断&#xff0c;可以找一下他们之间的规律。这里我拿一个用户来说&#xff0c;如果这个用户在1、2、3号都有登录记录&#xff0c;可以对这个用户的数据按照时间排序&…

从零学习大模型(九)-----P-Tuning(下)

代码展示P-Tuning的全过程 import torch from torch import nn from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset# 1. 数据准备 dataset load_dataset("imdb")# 2. 构建提示…

什么是安全组件?

安全组件是信息系统中用于保护数据和系统安全的关键部分。它们通常包括一系列的软件和硬件组件&#xff0c;旨在提供身份验证、授权、数据加密、防病毒、入侵检测等功能。这些组件可以是独立的软件程序&#xff0c;也可以是嵌入到操作系统或应用程序中的模块&#xff0c;或者作…