当前位置: 首页 > news >正文

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言:CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种攻击技术,通过使用用户的身份进行不诚实地操作,恶意用户可以在受害者(目标)的机器上执行一些未授权的操作。这可能会危及用户的信息安全或进行恶意的财务交易等。下面我们来介绍一下 CSRF 的简介、原理和防御方法。

1. 简介

CSRF 攻击通过在用户不知情的情况下,冒充用户身份向服务器发送请求。由于攻击者可以利用用户在站点上已存在的 cookie 进行身份验证,所以这种攻击往往不易被察觉。它与常见的 XSS(跨站脚本攻击)攻击有相似之处,都是利用 Web 应用程序的安全漏洞进行攻击。
CSRF常年位于CWE Top10,可见其危害性及普遍性。排名源自CWE官网https://cwe.mitre.org/top25/archive/2023/2023_top25_list.html
在这里插入图片描述

Note:如果想了解CWE,请参阅「 网络安全常用术语解读 」通用缺陷枚举CWE详解

2. 主要危害

在成功的CSRF攻击中,攻击者会导致受害者用户无意中执行操作。例如,这可能是更改他们帐户上的电子邮件地址、更改他们的密码或进行资金转账。根据操作的性质,攻击者可能能够完全控制用户的帐户。如果受危害的用户在应用程序中具有特权角色,则攻击者可能能够完全控制应用程序的所有数据和功能。
在这里插入图片描述

3. 攻击原理

CSRF 攻击的工作原理可以分为以下几个步骤:

  • 1、受害者首先会访问一个被攻击者控制的网站或者恶意网页,该网站包含了恶意脚本。
    当受害者再次访问自己的网站或应用程序时,恶意脚本会使用受害者的 cookie 向服务器发送请求,冒充受害者的身份进行操作。
  • 2、由于服务器端的应用程序通常会验证 cookie,所以攻击者可以成功冒充用户身份并执行一些未授权的操作。

CSRF 攻击的成功与否取决于两个因素:一是受害者对被攻击网站的信任,二是服务器端应用程序对 cookie 的依赖。由于大多数网站都会使用 cookie 进行身份验证,因此 CSRF 攻击是一种相对普遍的攻击方式。

3.1. 举例说明

假设应用程序允许用户更改其帐户上的电子邮件地址。当用户执行此操作时,他们会发出如下HTTP请求:

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfEemail=wiener@normal-user.com

这满足CSRF所需的条件:

  • 攻击者对更改用户帐户上的电子邮件地址的操作感兴趣。在此操作之后,攻击者通常能够触发密码重置并完全控制用户的帐户。
  • 应用程序使用会话cookie来标识哪个用户发出了请求。没有其他令牌或机制来跟踪用户会话。
  • 攻击者可以轻松确定执行操作所需的请求参数的值。

有了这些条件,攻击者可以构建包含以下HTML的网页:

<html><body><form action="https://vulnerable-website.com/email/change" method="POST"><input type="hidden" name="email" value="pwned@evil-user.net" /></form><script>document.forms[0].submit();</script></body>
</html>

如果受害者用户访问攻击者的网页,将发生以下情况:

  • 攻击者的页面将触发对易受攻击网站的HTTP请求。
  • 如果用户登录到易受攻击的网站,其浏览器将自动在请求中包含其会话cookie(假设未使用SameSite cookie)。
  • 易受攻击的网站将以正常方式处理请求,将其视为受害者用户发出的请求,并更改其电子邮件地址。

4. 防御手段

如今,成功发现并利用 CSRF 漏洞通常需要绕过目标网站、受害者的浏览器或两者的反 CSRF 措施。最常见的防御措施如下:

  • CSRF token:CSRF 令牌是一种由服务器端应用程序生成的独特、秘密和不可预测的值,并与客户端共享。当尝试执行敏感操作,如提交表单时,客户端必须在请求中包含正确的 CSRF 令牌。这使得攻击者很难代表受害者构建有效请求。

  • SameSite Cookie:SameSite 是浏览器安全机制,用于确定何时将网站的cookie包含在其他网站发起的请求中。由于执行敏感操作的请求通常需要验证会话cookie,适当的 SameSite 限制可能阻止攻击者跨站触发这些操作。

    自 2021 年以来Chrome 默认实施严格的 SameSite 限制。由于是提议标准,预计其他主要浏览器将在未来也采用这种策略。

  • 基于 Referer 的验证:一些应用程序使用 HTTP Referer 标头试图防御 CSRF 攻击,通常是通过验证请求是否来自应用程序自身的域名。这种方法通常不如 CSRF 令牌验证有效。

  • 强制进行验证码:通过在用户提交表单时强制显示验证码,可以增加 CSRF 攻击的难度。用户需要输入正确的验证码才能提交表单,这样可以减少恶意用户的操作

  • 设置 session 限制:对 session 设置合理的限制,如限制 session 的存活时间、设置 session 的过期时间等,可以有效减少 CSRF 攻击的风险。当用户长时间不操作时,session 应自动过期,以防止恶意用户长时间占用 session 进行攻击。

  • 禁止预提交字段:对于不需要提交的表单字段,如隐藏字段、checkbox 等,应禁止使用预提交方式。这样可以避免恶意用户利用这些字段绕过验证进行攻击。

5. 攻击者思路

1、检测网站采用的CSRF防御方法

  • 验证token:请求体中包含token字段,修改后请求会被拒绝;
  • 验证Referer请求头:请求头中包含Referer字段,修改后请求会被拒绝。

2、针对防御方法,识别绕过的方法

  • 验证token
    • 删除token:直接删除token或更改请求方法
    • 窃取token:1、若站点同时存在XSS漏洞,可利用XSS注入完成token获取;2、使用悬挂标记注入技术窃取token。

    关于XSS技术请参阅「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解,关于悬挂标记注入请参阅「 网络安全术语解读 」悬空标记注入详解。

  • 验证Referer请求头
    • 删除Referer头:直接删除Referer头
    • 构建特殊URL:构建包含信任域的Referer或构建以信任域开头的Referer

3、构造POC
借助Burp Suite专业版中的CSRF POC生成器可以快速构建POC。具体操作步骤请参阅如何通过Burp Suite专业版构建CSRF PoC,喜欢博文文章的可以收藏关注哈,谢谢支持~。

6. 参考

[1] https://portswigger.net/web-security/csrf


前期回顾
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

相关文章:

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种攻击技术&#xff0c;通过使用用户的身份进行不诚实地操作&#xff0c;恶意用户可以在受害者&#xff08;目标&#xff09;的机器上执行一些未授权的操作。这可能会危及…...

区间合并(pair,auto的用法)

给定 n 个区间 [li,ri]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n行&#xff0c;每行包含两…...

Java零基础教学文档第四篇:HTML_CSS_JavaScript(2)

【HTML】 【主要内容】WEB: 1&#xff0e;Web前端简介 2&#xff0e;创建第一个前端项目 3&#xff0e;相关标签详解 4&#xff0e;表格标签详解 5&#xff0e;表单标签详解 6&#xff0e;框架和实体字符 【学习目标】 1. Web前端简介 1.1 为什么要学习Web前端&#…...

2024 年 Linux 和开源的六大趋势预测

文章地址&#xff1a;观点|2024 年 Linux 和开源的六大趋势预测 让我们尝试预测未来吧&#xff01; 新的一年快乐&#xff0c;朋友们 ✨ 2024 年的钟声已经敲过&#xff0c;我们有必要去预见一下将塑造本年度的各种潮流。 我们不能预见未来&#xff0c;所以无法精确预知将会发…...

揭秘小米手机被疯狂吐槽的存储扩容技术

前段时间&#xff0c;在小米14的发布会上&#xff0c;雷布斯公布了名为“Xiaomi Ultra Space存储扩容”的技术&#xff0c;号称可以在512G的手机中再搞出来16G&#xff0c;256G的手机中再搞出8G。对于普通用户来说&#xff0c;能多得一些存储空间&#xff0c;无异是个很好的福利…...

Flutter 小技巧之升级适配 Xcode15

美好的 2024 从「适配」开始&#xff0c;按照苹果的尿性&#xff0c;2024 春季开始大家将不得使用 Xcode15 来构建 App &#xff0c;另外根据《2024 的 iOS 的隐私清单》 要求&#xff0c;使用 Flutter 的开发者是无法逃避适配 Xcode15 更新的命运。 另外&#xff0c;众所周知…...

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程 异步点餐的优点&#xff1a;能同时服务多个客人 异步点餐一定会提升单个客户点餐速度吗&#xff1f; 答案理所当然&#xff1a;不能 图片美化服务例子服务器能够同时服务的请求数量有限 void BeautifyPic (File photo, Response response) {byte[] …...

Rust-函数

简介 Rust的函数使用关键字fn开头。 函数可以有一系列的输入参数&#xff0c;还有一个返回类型。 函数体包含一系列的语句(或者表达式)。 函数返回可以使用return语句&#xff0c;也可以使用表达式。 Rust编写的可执行程序的入口就是fn main()函数。 以下是一个函数的示例…...

【java八股文】之分布式系列篇

【java八股文】之MYSQL基础篇-CSDN博客 【java八股文】之JVM基础篇-CSDN博客 【java八股文】之Redis基础篇-CSDN博客 【java八股文】之Spring系列篇-CSDN博客 【java八股文】之分布式系列篇-CSDN博客 【java八股文】之Java基础篇-CSDN博客 【java八股文】之多线程篇-CSDN…...

【CSCV】划分数据集

参考论文IEEE Xplore Full-Text PDF: 划分数据集时多了一个development set&#xff0c;如下图 先占个坑&#xff0c;看完论文再来填坑...

【面试合集】说说提高微信小程序的应用速度的手段有哪些?

面试官&#xff1a;说说提高微信小程序的应用速度的手段有哪些&#xff1f; 一、是什么 小程序启动会常常遇到如下图场景&#xff1a; 这是因为&#xff0c;小程序首次启动前&#xff0c;微信会在小程序启动前为小程序准备好通用的运行环境&#xff0c;如运行中的线程和一些基…...

uniapp——自定义导航栏的封装

为什么需要封装自定义导航 首先如果开发的是微信小程序&#xff0c;那么在安卓环境下导航栏标题是默认靠左对齐的&#xff08;虽然你在微信开发者工具上看到的依旧是居中展示&#xff09;&#xff0c;而在ios环境则是居中展示的。很多时候我们需要对整个项目有一个主题色或者公…...

Halcon机器视觉和运动控制软件通用框架,24年1月最新版新增UI设计器,插件式开发,开箱即用 仅供学习!

24年1月更新 下载点我 此版本已经添加ui设计器。具体功能如上所示&#xff0c;可以自定义变量&#xff0c;写c#脚本&#xff0c;自定义流程&#xff0c;包含了halcon脚本和封装的算子&#xff0c;可自定义ui&#xff0c;通过插件形式开发很方便拓展自己的功能。 ui设计器...

WebGL简介以及使用

WebGL简介 WebGL&#xff08;Web图形库&#xff09; 是一种在没有使用插件的情况下在网页浏览器中渲染2D图形和3D图形的技术。它基于OpenGL ES&#xff0c;一个在嵌入式系统中广泛使用的图形API。WebGL通过HTML5的 <canvas> 元素直接在网页上实现图形渲染&#xff0c;使…...

导轨式信号隔离变送器比例阀门线性驱动器4-20mA/0-5V/0-10V转0-165mA/0-80mA/0-1A/0-2A/0-4A

主要特性 精度、线性度误差等级&#xff1a; 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入0~100mA/0~500mA/0~1A/0-5A 等电流信号输出0~1V(max 2A)/0~10V/0-24V(max 5A) 等电压信号输出信号输入/信号输出 3000VDC 隔离辅助电源&#xff1a;12V、15V 或 24V 直流单电源供…...

Windows:win11不同分辨率2块屏幕在扩展模式下小屏上边有黑边

摘要&#xff1a;电脑只有一个核显时&#xff0c;Windows11系统在扩展模式下接入2块不同大小的分辨率的显示器&#xff0c;设置高分辨率显示器为主显示器。这时低分辨显示器系统可以正确设置分辨率&#xff0c;但是在低分率显示器上边出现较宽黑边&#xff0c;通过手工在显示设…...

Jenkins-执行脚本案例-初步认识JenKins的使用

环境搭建 docker pull jenkins/jenkins:2.440 docker run -d -p 10240:8080 -p 10241:50000 -v /env/liyong/data/docker/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins:2.440 #在挂载的目录下去修改仓库地址 vim hudson…...

Open CV 图像处理基础:(五)Java 使用 Open CV 的绘图函数

Java 使用 Open CV 的绘图函数 使用 Open CV 在 Java 中对图片使用绘图函数&#xff0c;分别绘制矩形、斜线、圆形、椭圆形以及添加文本 Java 使用 Open CV 的绘图函数 Java 使用 Open CV 的绘图函数函数绘制矩形绘制线绘制圆形绘制椭圆添加文本 代码示例Open CV 专栏导航 函…...

PostgreSQL之SEMI-JOIN半连接

什么是Semi-Join半连接 Semi-Join半连接&#xff0c;当外表在内表中找到匹配的记录之后&#xff0c;Semi-Join会返回外表中的记录。但即使在内表中找到多条匹配的记录&#xff0c;外表也只会返回已经存在于外表中的记录。而对于子查询&#xff0c;外表的每个符合条件的元组都要…...

开发规范及常用工具

一、定义对象规范 entity : 是与数据库一一对应的字段 vo : 返回给前端的视图对象 dto : 前端传过来的参数封装成dto,用于返回给前端的对象&#xff0c;一般用于查询操作。 POJO是DO/DTO/BO/VO的统称&#xff0c;禁止命名成xxxPOJO。 1、entity实体类与数据库中的字段一一对应…...

Seabay:AI应用开发的一站式工具箱,解决配置、数据、服务化与监控难题

1. 项目概述&#xff1a;Seabay&#xff0c;一个面向AI应用开发的“一站式”工具集最近在GitHub上看到一个挺有意思的项目&#xff0c;叫seapex-ai/seabay。乍一看这个名字&#xff0c;可能会联想到“海贝”或者“海港”&#xff0c;但它的定位其实非常明确&#xff1a;一个为A…...

LettR编辑器光标增强插件:提升代码编辑效率的智能导航方案

1. 项目概述&#xff1a;一个为LettR编辑器量身定制的光标增强插件如果你和我一样&#xff0c;日常重度依赖代码编辑器&#xff0c;那你一定对光标这个看似不起眼的小东西又爱又恨。爱的是&#xff0c;它是我们与代码世界交互的核心&#xff1b;恨的是&#xff0c;当代码文件越…...

Matplotlib保存图片尺寸总不对?搞懂bbox_inches=‘tight‘与figsize的‘相爱相杀’,一篇就够了

Matplotlib保存图片尺寸总不对&#xff1f;搞懂bbox_inchestight与figsize的‘相爱相杀’&#xff0c;一篇就够了 当你精心设计了一个数据可视化图表&#xff0c;设置了完美的figsize(10, 8)和dpi100&#xff0c;期待得到一张1000x800像素的精美图片&#xff0c;却在保存时发现…...

HTML5中Canvas文本对齐TextAlign与基线控制

...

Xshell6启动报错0xc000007b:从DLL缺失到Visual C++库修复的完整排障指南

1. 当Xshell6突然罢工&#xff1a;0xc000007b报错初体验 那天早上我像往常一样双击Xshell6图标&#xff0c;准备连接服务器&#xff0c;结果突然弹出一个冰冷的错误窗口&#xff1a;"应用程序无法正常启动(0xc000007b)"。这种系统级错误代码对很多Windows用户来说就…...

终极指南:Marketing-for-Engineers心理学应用——影响用户决策的12个心理效应

终极指南&#xff1a;Marketing-for-Engineers心理学应用——影响用户决策的12个心理效应 【免费下载链接】Marketing-for-Engineers A curated collection of marketing articles & tools to grow your product. 项目地址: https://gitcode.com/gh_mirrors/ma/Marketin…...

QtScrcpy安卓投屏终极指南:从零基础到精通应用的完整教程

QtScrcpy安卓投屏终极指南&#xff1a;从零基础到精通应用的完整教程 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrc…...

终极指南:Windows上无需模拟器安装安卓应用的完整教程

终极指南&#xff1a;Windows上无需模拟器安装安卓应用的完整教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上运行安卓应用&#xff0c;但厌倦了…...

2025届毕业生推荐的六大AI科研网站实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一款专为院校学子以及初级科研工作者所设计的AI开题报告工具&#xff0c;它聚焦于开题环节的…...

深度理解 C++ 继承与多态:从底层原理到实战技巧

目录 一、 继承&#xff1a;不仅是代码的复用 1.1 三种继承方式的差异 1.2 构造与析构的顺序&#xff08;避坑指南&#xff09; 二、 多态&#xff1a;让程序具备“生命力” 2.1 虚函数&#xff08;Virtual Function&#xff09; 2.2 核心代码示例 三、 深度思考&#x…...