漏洞原理

核心

CSRF(跨站请求伪造)漏洞的核心在于:浏览器会在跨站请求中自动附带用户的 Cookie 等身份凭证,导致攻击者可以诱导用户在已登录的情况下对目标网站发起恶意请求。

原理详解

  1. 用户登录了 B 网站,B 网站在浏览器里设置了会话 Cookie。

  2. 用户在未退出登录的情况下访问了攻击者控制的 A 网站。

  3. A 网站页面中包含一个指向 B 网站的恶意请求,例如:

    <img src="https://b.com/transfer?to=attacker&amount=1000">

上述链接会向攻击者转账1000元

4. 浏览器在请求 B 网站时,会自动带上用户的 Cookie

5. B 网站无法区分这是用户主动操作还是被攻击者诱导的请求,于是执行了恶意操作。


检测方法与危害

检测方法

  1. 手工检测方法

步骤一:准备测试环境

  • 使用测试账号登录目标网站。
  • 打开浏览器开发者工具,记录敏感请求(如修改密码、转账、删除等)。

步骤二:构造恶意请求

  • 将敏感请求封装成 HTML/JS 片段,模拟攻击者网站。例如:
<!-- 自动发起 GET 请求 -->
<img src="https://target.com/transfer?to=attacker&amount=1000"> <!-- 或自动提交表单 POST 请求 -->
<form action="https://target.com/change_email" method="POST" id="csrfForm">
<input type="hidden" name="email" value="attacker@example.com">
</form>
<script>document.getElementById('csrfForm').submit();</script>

步骤三:访问恶意页面

  • 在已登录状态下访问构造好的页面。

  • 观察目标站点是否执行了请求:

    • 成功执行 → 存在 CSRF 漏洞
    • 被拒绝或需要 Token → 可能已防护

  1. 自动化检测方法

2.1 使用漏洞扫描器

  • 工具如 OWASP ZAP、Burp Suite 都能检测 CSRF:

    • Burp Suite 的 “CSRF Scanner” 可以自动检测表单、请求是否缺少 CSRF Token。
    • ZAP 的 “Active Scan” 同样支持 CSRF 检测。

2.2 检测原理

  • 扫描器会:

    1. 捕获所有敏感请求。
    2. 重放请求到目标站点,模拟跨站攻击。
    3. 检查请求是否被执行(例如账户信息修改成功)。

危害

只要是用户在正常登录状态下能做到的操作,CSRF 理论上都能做到。


修复方法

推荐使用 Authorization: Bearer 的认证方式(JWT/OAuth),避免浏览器自动带 Cookie,从根本上杜绝 CSRF。下面是两种常见修复方法。

Refer头

不应作为主流修复方法。虽然实现简单,但是Referer不可靠,Referer段可能被浏览器去掉,也不利于用户隐私保护。

  • 原理:通过检查 RefererOrigin 请求头,验证请求是否来自本站页面。

Token机制

可以作为主流修复方法

  • 原理:在表单或请求中加入一个随机生成的 CSRF Token,并在服务端校验。
  • 流程
    1. 用户访问页面时,服务器生成一个随机 Token,放到前端localStorage、sessionStorage 或内存里。
    2. 前端在提交请求时,必须通过被访问网站的前端js脚本显式带上该 Token。
    3. 服务器验证 Token 是否正确。
    4. 因为用户是通过其他网站(网站A)访问一个网站(称为网站B),而只有网站B中的前端脚本中存储token,以此通过A网站无法获取B网站脚本中存储的token。

补充说明

Token和Cookie对比

特性 Cookie Token
发送方式 浏览器自动附带(不可控) 前端代码显式添加(可控)
存储位置 浏览器 Cookie Jar localStorage / sessionStorage / 内存
安全风险 易受 CSRF 攻击 抵抗 CSRF,但需防 XSS
使用场景 传统网站 Session 管理 API / 前后端分离 / 移动端
防御手段 需额外加 CSRF Token、SameSite Cookie 本身天然抵御 CSRF

localStorage/sessionStorage/内存

  1. localStorage

浏览器提供的存储空间,存放在用户本地硬盘上。

特点:

  • 持久存储(浏览器关了再开还在)。

  • 同源限制:只能被同一个域名的前端 JS 访问。

  • 常用于保存长期有效的 Token(例如 JWT)。

举例:


localStorage.setItem("token", "eyJhbGciOi...");
console.log(localStorage.getItem("token"));
  1. sessionStorage

和 localStorage 类似,也是浏览器提供的存储空间。

特点:

  • 仅在当前浏览器标签页有效。

  • 关闭标签页后就会清除。

  • 常用于保存短期 Token(例如一次性登录票据)。

举例:

sessionStorage.setItem("token", "eyJhbGciOi...");
console.log(sessionStorage.getItem("token"));
  1. 内存存储(In-memory)

    特点:
  • 不依赖浏览器自带的存储机制,而是把 Token 直接保存在运行时变量里。

  • 一旦页面刷新或浏览器关闭,变量就会消失。

  • 常用于安全要求更高的场景,因为 Token 不会长期暴露在 localStorage / sessionStorage 中。

举例:

let token = "eyJhbGciOi...";  // 保存在 JS 变量里

漏洞解析--CSRF的更多相关文章

  1. DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞

    DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞 1.漏洞利用 由于tpl.php中的$action,$content,$filename变量没有初始化,从而能操纵这些变量 ...

  2. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  3. KPPW2.5 漏洞利用--CSRF

    kppw2.5 CSRF漏洞复现 漏洞说明 http://192.168.50.157/kppw25/index.php?do=user&view=message&op=send 收件 ...

  4. XSS漏洞解析(三)

    系统存在xss漏洞就容易引发CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为: ...

  5. pikachu-暴力破解漏洞解析

    本篇blog导航 ~暴力破解&暴力破解漏洞概述 ~基于表单的暴力破解实验 ~暴力破解的绕过和防范(验证码&Token)     ~验证码的基础知识     ~验证码绕过(on clie ...

  6. XSS漏洞解析(一)

    以前写程序没有怎么关注这些网络安全问题,随着自己写的程序越来越多,开始关注了网络安全了. 一.什么是XSS XSS(Cross-Site Scripting) 跨站脚本是一种经常出现在web应用程序的 ...

  7. glassfish任意文件读取漏洞解析

    一.背景: glassfish是一款java编写的跨平台的开源的应用服务器. 二.漏洞原理: 与宽字节SQL注入一致,都是由于unicode编码歧义导致的.具体payload如下构造: http:// ...

  8. 2. Web渗透测试中常见逻辑漏洞解析与实战

    注:以下漏洞示例已由相关厂商修复,切勿非法测试! 0x01 漏洞挖掘 01  注册 注册中最常见的有两个,一个是恶意注册,另一个是账户遍历.一个好的注册界面应该是这样 或者这样的 而不是这样的 要么使 ...

  9. XSS漏洞解析(二)

    上篇我们讲了XSS的一些相关的内容,这篇我们就直接上代码demo解决实际问题吧. 主要的问题是xssfilter的编写,我们直接去网上找一下框架,一般有js,php,java等语言都有相关的XSS的相 ...

  10. URL重定向漏洞解析

    参考文章 悟空云课堂 | 第二期:URL重定向(跳转)漏洞 CWE-601: URL Redirection to Untrusted Site ('Open Redirect') 分享几个绕过URL ...

随机推荐

  1. ctypes学习 + GearDVFS源码分析(/src/perf_lib)

      最近在尝试复现GearDVFS的代码,代码结构很复杂,由于需要获取硬件信息,作者使用ctypes实现与底层的交互,任务紧迫,开始学习吧! 1. ctypes介绍   资料的来源已经放在了后文的链接 ...

  2. PTA 4-1

    PTA    习题4-1 求奇数和 (15分) 本题要求计算给定的一系列正整数中奇数的和. 输入格式: 输入在一行中给出一系列正整数,其间以空格分隔.当读到零或负整数时,表示输入结束,该数字不要处理. ...

  3. jqgrid工作记录1(单元格内容过长三个点显示,表头自动换行,取消滚动条预留空间)

    ①单元格内容过长三个点显示 效果如下: 页面加入css: 1 <style> 2 .ui-jqgrid tr.jqgrow td { 3 white-space: nowrap; 4 te ...

  4. JuiceFS 社区版 V1.3 正式发布:支持 Python SDK、亿级备份加速、SQL 和 Windows 全面优化

    JuiceFS 社区版 v1.3 今日正式发布,是自 2021 年开源以来的第四个重要版本.四年多的开源历程中,JuiceFS 在 GitHub 上已获得超 11.8K star,数据用量超过 800 ...

  5. SciTech-Mathmatics-Probability+Statistics-II-Population:Parameter Estimation + Samples:Statistics 总体的参数估计 和 样本统计量

    SciTech-Mathmatics-Probability+Statistics-Population:Region Parameter Estimation of Population + Sta ...

  6. SciTech-Mathmatics-Physics-Particle Physics-Election+Photon+Quantum: Parallel Universe + Superposition + Wave-Particle Duality.

    SciTech-Mathmatics-Quantum LaTex: https://tex.stackexchange.com/questions/483996/automatically-sized ...

  7. SciTech-EECS-ADC/DAC: 源自Digikey的模数/数模转换文章:原理、类型、特点、应用、推荐产品

    ADC/DAC 教程 作者:Pat Sagsveen, 投稿人:DigiKey, 2017-09-13 https://www.digikey.cn/zh/articles/adc-dac-tutor ...

  8. 题解:Luogu-P8624 [蓝桥杯 2015 省 AB] 垒骰子

    复习了一遍矩阵快速幂,感谢 @naroto2022 的讲课和分享的好题. 本题是一道动态规划结合矩阵加速的好题. 读完题考虑设计状态,记 \(f_{i,j}\) 为第 \(i\) 个骰子点数 \(j\ ...

  9. Win11系统桌面没有此电脑的问题

    许多电脑基地的用户安装Windows11系统之后,发现自己的电脑上没有此电脑等这个图标,但是我们在日常使用电脑的时候最经常使用打开的就是这个这个此电脑的,那么我们要怎么把它调出来呢?下面技术员小编就带 ...

  10. 算法判断矩形和圆形相交 OBB & Circle

    转自:https://www.zhihu.com/question/24251545