跨站请求是什么?
介绍
跨站请求(Cross-Site Request)通常是指浏览器在访问一个网站时,向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要,尤其是在涉及到“跨站请求伪造(CSRF)”和“跨域资源共享(CORS)”时。
✅ 原理:
-
用户登录了网站 A(比如网银),获得了身份 Cookie;
-
恶意网站 B 引导用户访问一个看不见的表单或图片链接;
-
浏览器默认会自动携带 Cookie 发起请求;
-
网站 A 接收到请求,并以为是用户主动发起的操作;
-
被攻击了!
<img src="https://bank.com/transfer?to=badguy&amount=1000" />
CORS 设置(针对跨域资源共享)
• 服务器通过 Access-Control-Allow-Origin 控制哪些域可以访问资源
• 默认禁止 JavaScript 跨域请求敏感信息
CSRF 防御:
• 使用 CSRF Token(后端生成一个隐藏字段或 header,必须携带)
• 使用 SameSite 属性限制 Cookie 跨站发送
• 检查 Referer 来源
• POST 请求验证身份
同源限制
❌A 网站不能直接访问 B 网站的 Cookie。
这是浏览器的**同源策略(Same-Origin Policy)**保护的。
✅ 什么是 Cookie 同源限制?
同源 = 协议 + 域名 + 端口 都相同
浏览器规定:
一个网站(origin)设置的 Cookie,只能被这个网站自己访问。
🔒 比如:
| 网站 | 可访问的 Cookie 域 |
|---|---|
| https://a.com | 只能访问属于 a.com 的 Cookie |
| https://b.com | 不能访问 a.com 的 Cookie |
所以,即使你设置了“允许所有 Cookie”,浏览器还是会自动隔离不同网站之间的 Cookie。
🍪 那些“Allow all cookies”是啥意思?
这些是用户给浏览器设置的权限,意思是:
• 是否允许 第三方 Cookie(Third-Party Cookies)。
• 比如:你在 a.com 上访问,但页面里加载了 b.com 的 iframe / 图片 / script,这些操作是否可以让浏览器存取 b.com 的 Cookie。
<!-- 你在访问 a.com -->
<iframe src="https://b.com/login"></iframe>
如果浏览器允许第三方 Cookie,b.com 的页面可以设置 Cookie,这个 Cookie 是属于 b.com 的。
⚠️ 你在 a.com 的 JS 代码还是访问不到 b.com 的 Cookie!
强限制SameSite
🔒 SameSite 是啥?
SameSite 是浏览器用来限制 Cookie 在跨站请求中是否可以携带的一个 Cookie 属性。
是 Cookie 本身带的设置,告诉浏览器:“这个 Cookie 什么时候可以被发送?”
📋 SameSite 的三种取值:
| 值 | 含义 | 跨站请求是否带 Cookie? | 场景 |
|---|---|---|---|
| Strict | 严格模式 | ❌完全禁止 | 安全性最高,比如网银登录 |
| Lax | 宽松模式 | ✅允许 GET 导航(如点击链接) | 登录页面跳转 |
| None | 无限制 | ✅允许所有跨站请求,但需要加 Secure(HTTPS) | 跨站 API、第三方登录等 |
假设你在 a.com 登录后有个 Cookie:sessionid=abc123,设置了:
# Django/FastAPI 设置 Cookie 的时候加:
response.set_cookie(key="sessionid",value="abc123",samesite="strict",secure=True,
)
如果你后来从 b.com 发起一个请求到 a.com:
// 你在 b.com 上写了
fetch('https://a.com/api/userinfo', { credentials: 'include' })
🔒 浏览器不会携带 sessionid=abc123,因为你设置了 SameSite=Strict。
✅ 原因:
• 防止 CSRF 攻击(跨站请求伪造)
• 增加账户安全性
• 默认更“保守”,开发者自己决定放开(改为 Lax 或 None)
❗注意:
• 如果你的网站需要 跨站点请求+登录状态,比如前端 a.com、后端 api.a.com,就不能用 Strict,你要用:
SameSite=None; Secure
如果后端不使用 Cookie,而是使用 Authorization Header(比如 JWT)做身份验证,那 SameSite=Strict 对你来说根本不重要,完全没影响。
🔐 传统 Cookie 登录(状态保存在服务器):
• 登录成功后后端设置 cookie:
Set-Cookie: sessionid=abc123; SameSite=Strict
• 每次请求,浏览器自动带上 cookie:
Cookie: sessionid=abc123
这时候 SameSite=Strict 会阻止浏览器在跨站请求中携带这个 Cookie,比如别人恶意发起跨站 POST 请求,防止 CSRF。
| 项目类型 | 使用 Cookie 吗? | 是否需要关注 SameSite? |
|---|---|---|
| 传统后端渲染(Django 模板) | ✅ 是 | ✅ 需要,最好设为 Lax 或 Strict |
| 前后端分离 + Cookie 登录 | ✅ 是 | ✅ 必须关注(建议 None + Secure) |
| 前后端分离 + JWT 登录 | ❌ 否 | ❌ 不用管 SameSite,随它去 |
Https_only
https_only=True(也叫 secure=True)确实是为了强制浏览器只在 HTTPS 请求时发送 Cookie,而且它的确跟你的测试环境用 HTTP 有冲突。
在 Django / FastAPI / Flask 里,如果你设置:
response.set_cookie(key="sessionid",value="abc123",secure=True # 或 https_only=True
)
它的作用是:
🚫 浏览器只会在
HTTPS 请求
❌ 如果是 HTTP 请求,浏览器会完全忽略这个 Cookie。
🔐 为什么要这么做?
• 防止中间人攻击(Man-in-the-middle attack)
• 保证 Cookie 不被 HTTP 劫持或监听
• 是现代 Web 安全的基本要求,特别是在登录、权限等敏感操作中非常重要
相关文章:
跨站请求是什么?
介绍 跨站请求(Cross-Site Request)通常是指浏览器在访问一个网站时,向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要,尤其是在涉及到“跨站请求伪造(CSRF)”和“跨域资源共享ÿ…...
【LeetCode Solutions】LeetCode 160 ~ 165 题解
CONTENTS LeetCode 160. 相交链表(简单)LeetCode 162. 寻找峰值(中等)LeetCode 164. 最大间距(中等)LeetCode 165. 比较版本号(中等) LeetCode 160. 相交链表(简单&#…...
Openssl升级至openssl9.8p1含全部踩坑内容
1、安装依赖包基础条件 yum install gcc yum install gcc-c yum install perl yum install perl-IPC-Cmd yum install pam yum install pam-devel sudo yum install perl-Data-Dumper 问题一:提示yum不可用 镜像源问题更换阿里源即可 wget -O /etc/yum.repos.d/…...
ASP.NET Core 性能优化:内存缓存
文章目录 前言一、什么是缓存二、内存缓存三、使用内存缓存1)注册内存缓存服务2)注入与基本使用3)高级用法GetOrCreate(避免缓存穿透)异步方法:GetOrCreateAsync(避免缓存穿透)两种过…...
二战蓝桥杯所感
🌴 前言 今天是2025年4月12日,第十六届蓝桥杯结束,作为二战的老手,心中还是颇有不甘的。一方面,今年的题目比去年简单很多,另一方面我感觉并没有把能拿的分都拿到手,这是我觉得最遗憾的地方。不…...
屏幕模块解析
通信协议 SPI 引脚定义 GPIO说明引脚配置SCK时钟线推挽输出MOSI主机输出、从机输入推挽输出MISO主机输入、从机输出浮空/上拉输入:没有开启数据传输时为高阻态SS片选推挽输出CPOL时钟极性0:空闲时SCK为低电平 1:空闲时SCK为高电平 CPHA时钟相位0:主从SCK第一个边沿输入1bi…...
查看手机在线状态,保障设备安全运行
手机作为人们日常生活中不可或缺的工具,承载着沟通、工作、娱乐等多种功能。保障手机设备的安全运行是我们每个人都非常重要的任务,而了解手机的在线状态则是其中的一环。通过挖数据平台提供的在线查询工具,我们可以方便快捷地查询手机号的在…...
#关于数据库中的时间存储
✅ 一、是否根据“机器当前时区”得到本地时间再转 UTC? 结论:是的,但仅对 TIMESTAMP 字段生效。 数据库(如 MySQL)在插入 TIMESTAMP 类型数据时: 使用当前会话的时区(默认跟随系统时区&#…...
第16届蓝桥杯省赛python B组个人题解
文章目录 前言ABCDEFGH 前言 仅个人回忆,不保证正确性 貌似都是典题,针对python的长代码模拟题也没有,一小时速通了,希望不要翻车。 更新:B、G翻车了。。 A 答案:103 B 应该是按长度排序,然后…...
lvs+keepalived+dns高可用
1.配置dns相关服务 1.1修改ip地址主机名 dns-master: hostnamectl hostname lvs-master nmcli c modify ens160 ipv4.method manual ipv4.addresses 10.10.10.107/24 ipv4.gateway 10.10.10.2 ipv4.dns 223.5.5.5 connection.autoconnect yes nmcli c up ens160dns-salve: h…...
Spark RDD相关概念
Spark运行架构与核心组件 1.Spark运行梁构 spark运行架构包括master和slave两个主要部分。master负责管理整个集群的作业任务调度,而slave则负责实际执行任务。 dirver是Spark驱动器节点,负责执行Spark任务中的main方法,将用户程序转换成作业…...
雷池WAF防火墙如何构筑DDoS防护矩阵?——解读智能语义解析对抗新型流量攻击
本文深度解析雷池WAF防火墙在DDoS攻防中的技术突破,通过智能语义解析、动态基线建模、协同防护体系三大核心技术,实现从流量特征识别到攻击意图预判的进化。结合2023年金融行业混合攻击防御案例,揭示新一代WAF如何通过协议级漏洞预判与AI行为…...
网络互连与互联网
1.在路由表中找不到目标网络时使用默认路由,默认路由通常指本地网关的地址。 2.OSPF最主要的特征是使用分布式链路状态协议,而RIP使用的是距离向量协议。 3.OSPF使用链路状态公告LSA扩散路由信息 4.内部网关路由协议IGRP是一种动态距离矢量路由协议&a…...
Pytorch实现基于FlowS-Unet的遥感图像建筑物变化检测方法
基于FlowS-Unet的遥感图像建筑物变化检测方法是一种结合深度学习与细化结构的先进技术,旨在提高建筑物变化检测的精度和鲁棒性。 一、FlowS-Unet的核心架构与原理 FlowS-Unet是在经典U-Net网络基础上改进的模型,主要引入了超列(Hypercolumns)和FlowNet细化结构,通过多尺…...
什么是柜台债
柜台债(柜台债券业务)是指通过银行等金融机构的营业网点或电子渠道,为投资者提供债券买卖、托管、结算等服务的业务模式。它允许个人、企业及机构投资者直接参与银行间债券市场的交易,打破了以往仅限机构参与的壁垒。以下是综合多…...
SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记
目录 前言 背景与需求 代码改进方案 运行过程: 1、Run编辑 2、过程: 3、过程时间线: 4、最终效果展示: 总结与展望 前言 机器学习缺点之一:即不可解释性。最近,我在使用stable diffusion v1.5 Co…...
【ROS2】行为树:BehaviorTree
1、简介 与状态机不同,行为树强调执行动作,而不是状态之间的转换。 行为树是可组合的。可以重复使用简单的行为来构建复杂的行为。 在游戏领域,行为树已经比较流行了。主要用于维护游戏角色的各种动作和状态。 ROS2的导航框架Navigation2中引入了行为树来组织机器人的工作流…...
《JVM考古现场(十八):造化玉碟·用字节码重写因果律的九种方法》
"鸿蒙初判!当前因果链突破十一维屏障——全体码农修士注意,《JVM考古现场(十八)》即将渡劫飞升!" 目录 上卷阴阳交缠 第一章:混沌初开——JVM因果律的量子纠缠 第二章:诛仙剑阵改—…...
使用nuxt3+tailwindcss4+@nuxt/content3在页面渲染 markdown 文档
nuxt3tailwindcss在页面渲染 markdown 文档 页面效果 依赖 “nuxt/content”: “^3.4.0” “tailwindcss”: “^4.0.10” “nuxt”: “^3.16.2” “tailwindcss/vite”: “^4.0.10” tailwindcss/typography (这个是格式化 md 样式用的) 注意: 这里nuxt/content…...
[250412] OpenSSH 10.0 发布,移除DSA算法,sshd默认禁用有限域DH,并分离认证代码
目录 OpenSSH 10.0 正式发布:关键更新摘要主要变更亮点(潜在不兼容性) OpenSSH 10.0 正式发布:关键更新摘要 OpenSSH 10.0 已于 2025 年 4 月 9 日发布,现在可以从官网列出的镜像站点获取最新版本。 OpenSSH 是一个广…...
部署NFS版StorageClass(存储类)
部署NFS版StorageClass存储类 NFS版PV动态供给StorageClass(存储类)基于NFS实现动态供应下载NFS存储类资源清单部署NFS服务器为StorageClass(存储类)创建所需的RBAC部署nfs-client-provisioner的deployment创建StorageClass使用存储类创建PVC NFS版PV动态供给StorageClass(存储…...
JS【详解】迭代器 Iterator(含可迭代对象、同步迭代器、异步迭代器等)
什么是迭代器? JS 迭代器是一种遍历访问数据结构中所有成员的机制,本质是一个指针对象。 为什么要有迭代器? 为各种不同的数据结构提供统一的访问机制。自定义数据结构的遍历:当你创建了一个自定义的数据结构时,可以实…...
CFS 调度器两种调度类型普通调度 和 组调度
在 Linux 的 CFS(Completely Fair Scheduler) 调度器中,确实存在两种调度类型:普通调度 和 组调度。这两种调度类型分别适用于不同的场景,并通过三个关键维度(权重、抢占优先级、最大配额)来影响…...
Linux网络编程——详解网络层IP协议、网段划分、路由
目录 一、前言 二、IP协议的认识 1、什么是IP协议? 2、IP协议报头 三、网段划分 1、初步认识IP与路由 2、IP地址 I、DHCP动态主机配置协议 3、IP地址的划分 I、CIDR设计 II、子网数目的计算 III、子网掩码的确定 四、特殊的IP地址 五、IP地址的数量限…...
【图像生成之21】融合了Transformer与Diffusion,Meta新作Transfusion实现图像与语言大一统
论文:Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model 地址:https://arxiv.org/abs/2408.11039 类型:理解与生成 Transfusion模型是一种将Transformer和Diffusion模型融合的多模态模型,旨…...
Microsoft Office 如何启用和正常播放 Flash 控件
对于新安装的 Office 默认是不支持启用 Flash 组件的,Flash 组件会无法播放或者黑屏。 本片文章就带你解决这个问题,相关资料都在下方连接内。前提概要,教程对应的版本是 mso16,即 Office 2016 及更新版本,以及 365 等…...
深入浅出:信号灯与系统V信号灯的实现与应用
深入浅出:信号灯与系统V信号灯的实现与应用 信号灯(Semaphore)是一种同步机制,用于控制对共享资源的访问。在多线程或多进程环境下,信号灯能够帮助协调多个执行单元对共享资源的访问,确保数据一致性与程序…...
定位改了IP属地没变怎么回事?一文解析
明明用虚拟定位软件将手机位置改到了“三亚”,为何某某应用评论区显示的IP属地还是“北京”?为什么切换了代理IP,平台却似乎“无视”这一变化? 在“IP属地显示”功能普及后,许多用户尝试通过技术手段隐藏真实位置&…...
Cygwin中使用其它平台生成的动态库
在 Cygwin 环境下链接 VC 生成的 DLL 库需解决符号导出格式和调用约定的兼容性问题,以下是具体操作步骤: 一、VC 生成 DLL 的配置要点 声明 C 风格导出函数 在 VC 中使用 extern "C" 和 __declspec(dllexport) 避免 C 名称修饰,…...
《深入理解生命周期与作用域:以C语言为例》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、生命周期:变量的存在时间(一)生命周期的定义(二)C语言中的生命周期类型(三&#…...
