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

深入剖析 CSRF 漏洞:原理、危害案例与防护

目录

前言

漏洞介绍

漏洞原理

产生条件

产生的危害

靶场练习

post 请求csrf案例

防御措施

验证请求来源

设置 SameSite 属性

双重提交 Cookie

结语


前言

在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造(Cross - Site Request Forgery,简称 CSRF)漏洞便是其中较为隐蔽且危害较大的一种。它如同隐藏在暗处的 “小偷”,悄无声息地窃取用户权限,执行恶意操作。了解 CSRF 漏洞,无论是对 Web 开发者加固应用安全,还是对普通用户提升安全防范意识,都有着重要意义。

漏洞介绍

CSRF 漏洞,简单来说,是指攻击者诱导受害者进入一个恶意链接,利用受害者在已登录的目标网站上的身份验证信息,在受害者不知情的情况下,以受害者的名义在目标网站上执行非本意的操作。与跨站脚本(XSS)漏洞不同,CSRF 漏洞主要利用的是网站对用户浏览器的信任,而非直接攻击用户浏览器。这种漏洞广泛存在于各类 Web 应用中,只要应用依赖用户的身份验证来执行敏感操作,就有可能受到 CSRF 攻击的威胁。

漏洞原理

  1. 用户登录与身份验证:用户在目标网站进行登录,网站通过 Cookie 或 Token 等方式对用户进行身份验证,并在后续请求中识别用户身份。例如,用户登录银行网站后,银行网站会为用户生成一个包含身份信息的 Cookie,用户后续的转账、查询等操作,网站都会根据这个 Cookie 来确认用户身份。
  2. 攻击者构造恶意链接:攻击者精心构造一个包含恶意操作的链接,比如转账到攻击者账户的链接。这个链接的请求地址是目标网站的合法操作地址,但是参数被攻击者篡改,包含了恶意指令。
  3. 诱导受害者访问:攻击者通过各种手段,如发送恶意邮件、在社交平台发布诱人的消息等,诱导受害者点击这个恶意链接。当受害者点击链接时,由于受害者的浏览器中保存着目标网站的身份验证信息(如 Cookie),浏览器会自动带上这些信息向目标网站发送请求。
  4. 目标网站执行恶意操作:目标网站接收到请求后,根据附带的身份验证信息,认为请求来自合法用户,从而执行了链接中的恶意操作,如转账、修改密码等,而受害者对此毫不知情。

产生条件

  1. 目标网站存在敏感操作:网站提供了如转账、修改密码、删除重要数据等敏感操作,这些操作仅应在用户主动发起且确认的情况下执行。
  2. 身份验证信息存储方式不当:网站依赖 Cookie 或其他简单的身份验证机制,且这些验证信息在用户浏览器中存储,容易被攻击者利用。例如,Cookie 没有设置 HttpOnly 属性,使得攻击者可以通过 JavaScript 读取 Cookie 内容,进一步利用。
  3. 缺乏有效的防御机制:网站没有对请求来源进行严格验证,无法识别出请求是否来自合法用户的主动操作,还是被攻击者诱导的恶意请求。

产生的危害

  1. 经济损失:在金融类网站中,攻击者利用 CSRF 漏洞进行转账操作,直接导致用户的资金被盗取,给用户带来严重的经济损失。
  2. 隐私泄露:攻击者可以修改用户的个人信息,如在社交网站上修改用户的隐私设置,将原本私密的信息公开,造成用户隐私泄露。
  3. 账号被盗用:通过修改用户密码,攻击者可以轻松登录用户账号,进一步控制用户的账户,发布恶意信息,甚至利用用户的社交关系进行诈骗等活动。

靶场练习

  1. 搭建靶场环境:使用开源的 Web 安全靶场,在这里使用的是DVWA(Damn Vulnerable Web Application)。在虚拟机环境中部署 DVWA,设置好相关的数据库和配置文件。
  2. 选择 CSRF 漏洞模块:进入 DVWA 的 CSRF 漏洞测试模块,将安全级别设置为 “Low”,这个级别下的漏洞比较容易复现。
  3. 构造恶意链接:查看low模式下的源代码是否有进行过滤,可以查看没有进行过滤校验在该模块中,有一个修改用户密码的功能。攻击者可以通过抓包工具(如 Burp Suite)获取正常修改密码的请求包,然后修改其中的密码参数,构造出一个恶意链接。正常的修改密码请求是,攻击者将其修改为http://10.0.0.100:90/DVwa-master/vulnerabilities/csrf/?password_new=123456333&password_conf=123456333&Change=Change#。
  4. 诱导受害者访问:假设受害者已经登录了 DVWA 且浏览器中保存了登录的 Cookie。攻击者将构造好的恶意链接发送给受害者,当受害者点击链接时,浏览器会自动带上 Cookie 向 DVWA 发送请求,从而实现密码修改,完成 CSRF 攻击的复现。
  5. 防御措施验证:将 DVWA 的安全级别提升到 “Medium” 或 “High”,再次尝试上述攻击。在 “Medium” 级别,网站可能会增加一些简单的防御机制,如在请求中增加一个随机的 Token,验证 Token 的合法性。攻击者会发现攻击无法成功,从而理解防御 CSRF 漏洞的原理和方法。

post 请求csrf案例

  1. 登录凡诺后台修改密码:
    操作描述:攻击者首先正常登录凡诺后台系统,进入修改密码的功能页面。在这个页面中,攻击者会输入新密码并提交修改请求,这一步的目的是触发系统的修改密码操作,以便后续利用这个操作来构造 CSRF 攻击。在这里我修改的密码是1234567。
    重要性:通过这一步,攻击者可以熟悉修改密码的流程和页面布局,同时为后续抓包获取必要的请求信息做准备。
  2. 使用 Burp Suite 抓包

    抓包工具介绍:Burp Suite 是一款广泛使用的 Web 应用程序安全测试工具,它可以拦截、修改和分析 HTTP 请求和响应。攻击者利用 Burp Suite 的抓包功能,捕获在凡诺后台修改密码时浏览器发送的请求。
    请求类型与关键信息
    没有 Token 值:Token 是一种用于防止 CSRF 攻击的机制,通常是服务器生成的一个随机字符串,会在每次请求中附带。如果请求中没有 Token 值,说明该系统在修改密码这个功能上可能没有实现有效的 CSRF 防护,这为攻击者提供了可乘之机。
    POST 请求:抓包结果显示修改密码的请求是一个 POST 请求。POST 请求通常用于向服务器提交数据,在修改密码的场景中,新密码等重要信息会通过 POST 请求发送到服务器。
  3. 使用 Burp Suite 生成 POC(Proof of Concept,概念验证)

    POC 生成过程
    1. 通过分析生成的 POC 代码,可以看到请求的详细信息,包括请求的 URL、请求方法(POST)、请求参数(如用户名、新密码等)。
      在 Burp Suite 中,攻击者可以利用抓包得到的请求信息,使用其内置的功能生成一个 POC。这个 POC 本质上是一段可以模拟用户修改密码请求的代码,通常是一段 JavaScript 代码。

      将修改后的 JavaScript 代码复制到一个新的 HTML 文件中。HTML 文件可以在浏览器中打开,当浏览器加载这个 HTML 文件时,其中的 JavaScript 代码会自动执行,向凡诺后台服务器发送修改密码的请求。
    • 修改代码并创建 HTML 文件:这里将1234567的密码修改为12345678,将代码放在单独的文件中
    • 废弃 Burp Suite 数据包:在完成 HTML 文件的创建后,攻击者不再需要之前在 Burp Suite 中捕获的原始数据包,因此可以将其废弃。
  4. 诱导被攻击者打开 HTML 文件

    • 攻击原理:当被攻击者在已经登录凡诺后台的状态下打开攻击者构造的 HTML 文件时,浏览器会执行其中的 JavaScript 代码,向凡诺后台服务器发送修改密码的请求。由于被攻击者的浏览器中保存着登录凡诺后台的会话信息(如 Cookie),服务器会认为这个请求是由合法用户发起的,从而执行修改密码的操作。在这里我们在本机环境中进行演示。
    • 攻击成功标志:如果被攻击者成功打开了 HTML 文件,并且服务器接受了修改密码的请求,那么攻击就成功了。攻击者可以通过检查凡诺后台的密码是否被修改来确认攻击结果。
    • 此时输入1234567发现密码错误,已经更改为12345678

防御措施

  1. 验证请求来源

  • Referer 验证:服务器可以通过检查请求头中的 Referer 字段来判断请求的来源。如果 Referer 字段的值不符合预期,说明请求可能来自恶意网站,可以拒绝该请求。但需要注意的是,Referer 字段可以被篡改,因此这种方法并不是绝对安全的。
  • 同源策略:现代浏览器遵循同源策略,只有来自同一源(协议、域名和端口都相同)的页面才能直接访问另一个页面的资源。服务器可以利用这一特性,确保请求来自合法的源。
  1. 使用 CSRF Token
  • 生成 Token:服务器在用户访问包含敏感操作的页面时,生成一个随机且唯一的 CSRF Token,并将其存储在服务器端(如会话中),同时将 Token 嵌入到页面中(如隐藏表单字段或请求头)。
  • 验证 Token:当用户提交请求时,客户端需要将 Token 一并发送给服务器。服务器验证客户端提交的 Token 与服务器端存储的 Token 是否一致,如果一致则认为请求合法,否则拒绝请求。
  1. 设置 SameSite 属性

SameSite 是 Cookie 的一个属性,用于控制 Cookie 在跨站请求中的传递。可以将 Cookie 的 SameSite 属性设置为 “Strict” 或 “Lax”,以限制 Cookie 只在同源请求或同站请求中传递,从而减少 CSRF 攻击的风险。

双重提交 Cookie

服务器在用户访问页面时,生成一个随机的 Token 并将其存储在 Cookie 中,同时将该 Token 嵌入到页面的表单字段或请求头中。当用户提交请求时,服务器会比较 Cookie 中的 Token 和请求中携带的 Token 是否一致,如果一致则认为请求合法。

结语

CSRF 漏洞虽然隐蔽,但只要开发者和用户提高安全意识,采取有效的防范措施,就能大大降低其带来的风险。对于开发者来说,要在代码层面增加对请求来源的验证,使用 Token 等技术防止恶意请求。对于用户而言,要谨慎点击不明链接,尤其是在已登录重要网站的情况下。网络安全是一场持久战,需要我们不断学习和实践,共同守护网络空间的安全。

相关文章:

深入剖析 CSRF 漏洞:原理、危害案例与防护

目录 前言 漏洞介绍 漏洞原理 产生条件 产生的危害 靶场练习 post 请求csrf案例 防御措施 验证请求来源 设置 SameSite 属性 双重提交 Cookie 结语 前言 在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造&…...

C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库

用C实现高性能数据处理,Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据…...

AI大模型开发原理篇-5:循环神经网络RNN

神经概率语言模型NPLM也存在一些明显的不足之处:模型结构简单,窗口大小固定,缺乏长距离依赖捕捉,训练效率低,词汇表固定等。为了解决这些问题,研究人员提出了一些更先进的神经网络语言模型,如循环神经网络、…...

4-图像梯度计算

文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…...

数据结构与算法 —— 常用算法模版

数据结构与算法 —— 常用算法模版 二分查找素数筛最大公约数与最小公倍数 二分查找 人间若有天堂,大马士革必在其中;天堂若在天空,大马士革必与之齐名。 —— 阿拉伯谚语 算法若有排序,二分查找必在其中;排序若要使用…...

DDD - 领域事件_解耦微服务的关键

文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题 EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念 领域事件&a…...

芯片AI深度实战:实战篇之vim chat

利用vim-ollama这个vim插件,可以在vim内和本地大模型聊天。 系列文章: 芯片AI深度实战:基础篇之Ollama-CSDN博客 芯片AI深度实战:基础篇之langchain-CSDN博客 芯片AI深度实战:实战篇之vim chat-CSDN博客 芯片AI深度…...

【产品经理学习案例——AI翻译棒出海业务】

前言: 本文主要讲述了硬件产品在出海过程中,翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家,需要优化翻译质量和算法,关注市场需求和文化差异,以便更好地满足当地用户的需求。同…...

解决运行npm时报错

在运行一个Vue项目时报错,产生下面问题 D:\node\npm.cmd run dev npm WARN logfile could not be created: Error: EPERM: operation not permitted, open D:\node\node_cache\_logs\2025-01-31T01_01_58_076Z-debug-0.log npm WARN logfile could not be created:…...

【07-编译工程与导入网表】

这里写自定义目录标题 一丶编译原理图编译默认属性一丶编译项目二丶输出BOM材料报告优化EXCEL-BOM清单 三丶输出PDF原理图给维修人员看 四丶导入网格表查看是否有错误常见错误 其他问题什么是位号(C1)?EXCEL添加序号列和居中显示?位号(序号)与单位(型号)EXCEL设置自动换行 编…...

FireFox | Google Chrome | Microsoft Edge 禁用更新 final版

之前的方式要么失效,要么对设备有要求,这次梳理一下对设备、环境几乎没有要求的通用方式,universal & final 版。 1.Firefox 方式 FireFox火狐浏览器企业策略禁止更新_火狐浏览器禁止更新-CSDN博客 这应该是目前最好用的方式。火狐也…...

conda配置channel

你收到 CondaKeyError: channels: value https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main not present in config 错误是因为该镜像源(https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main)可能没有被正确添加到 Conda 的配置文件中&…...

【MQ】探索 Kafka

基本概念 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。消息位移:Offset。表示分区中每条消息的位置信息,是一个…...

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下,热源 (q) 不是通…...

计算机网络 笔记 网络层 3

IPv6 IPv6 是互联网协议第 6 版(Internet Protocol Version 6)的缩写,它是下一代互联网协议,旨在解决 IPv4 面临的一些问题,以下是关于 IPv6 的详细介绍: 产生背景: 随着互联网的迅速发展&…...

翼星求生服务器搭建【Icarus Dedicated Server For Linux】

一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…...

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

目录 1011 : 圆柱体表面积 C语言版 C版 1012 : 求绝对值 C语言版 C版 1013 : 求两点间距离 C语言版 C版 1014 : 求三角形的面积 C语言版 C版 1015 : 二次方程的实根 C语言版 C版 1016 : 银行利率 C语言版 C版 1017 : 表面积和体积 C语言版 C版 代码逻辑…...

论文阅读:Realistic Noise Synthesis with Diffusion Models

这篇文章是 2025 AAAI 的一篇工作,主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据,而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…...

复杂场景使用xpath定位元素

在复杂场景下使用XPath定位元素时,可以通过以下高级技巧提高定位准确性和稳定性: 动态属性处理 模糊匹配: //div[contains(id, dynamic-part)] //button[starts-with(name, btn-)] //input[ends-with(class, -input)] (需XPath 2.0)多属性…...

算法基础——存储

引入 基础理论的进步,是推动技术实现重大突破,促使相关领域的技术达成跨越式发展的核心。 在发展日新月异的大数据领域,基础理论的核心无疑是算法。不管是技术设计,还是工程实践,都必须仰仗相关算法的支持&#xff0…...

动态规划 (环形)

在一个圆形操场的四周摆放着n堆石子,现要将石子有次序地合并成一堆。规定每次只能选相邻2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 输入格式: n表示n…...

信号模块--simulink操作

位置simulink/sourses 常用的模块 功能:常数模块,提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置(例三维数据设置) 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度,0到…...

Streamlit入门

1、Streamlit是什么 Streamlit 是一个用于快速构建数据应用的开源 Python 库,由 Streamlit 公司开发并维护。它极大地简化了从数据脚本到交互式 Web 应用的转化过程,让开发者无需具备前端开发的专业知识,就能轻松创建出美观、实用的交互式应…...

列表(列表是什么)

你将学习列表是什么以及如何使用列表元素。列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。 列表是新手可直接使用的最强大的Python功能之一,它融合了众多重要的编程概念。 列表是什么 列表 由一系列…...

笔记本搭配显示器

笔记本:2022款拯救者Y9000P,显卡RTX3060,分辨率2560*1600,刷新率:165Hz,无DP1.4口 显示器:2024款R27Q,27存,分辨率2560*1600,刷新率:165Hz &…...

基于排队理论的物联网发布/订阅通信系统建模与优化

论文标题 英文标题:Queuing Theory-Based Modeling and Optimization of a Publish/Subscribe IoT Communication System 中文标题:基于排队理论的物联网发布/订阅通信系统建模与优化 作者信息 Franc Pouhela Anthony Kiggundu Hans D. Schotten …...

指针(C语言)从0到1掌握指针,为后续学习c++打下基础

目录 一,指针 二,内存地址和指针 1,什么是内存地址 2,指针在不同系统下所占内存 三,指针的声明和初始化以及类型 1,指针的声明 2,指针 的初始化 1, 初始化方式优点及适用场景 4,指针的声明初始化类型…...

实验八 JSP访问数据库

实验八 JSP访问数据库 目的: 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求: 1、通过JDBC访问mysql数据,实现增删改查功能的实现 2、要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程&a…...

Day31-【AI思考】-关键支点识别与战略聚焦框架

文章目录 关键支点识别与战略聚焦框架**第一步:支点目标四维定位法****第二步:支点验证里程碑设计****第三步:目标网络重构方案****第四步:动态监控仪表盘** 执行工具箱核心心法 关键支点识别与战略聚焦框架 让思想碎片重焕生机的…...

DeepSeek与其他大模型相比

DeepSeek与其他大模型相比 与GPT-4对比 性能方面 推理速度:DeepSeek在解决复杂的数学、物理和逻辑推理问题方面速度惊人,是ChatGPT的两倍。“幻觉”现象:在处理需要网络信息检索的任务时,DeepSeek的“幻觉”现象似乎比ChatGPT更少。创意任务:ChatGPT在创意性任务,如创作…...