CSRF(跨站请求伪造)攻击演示
目录
- CSRF(跨站请求伪造)攻击演示
- CSRF 是什么
- CSRF 演示项目代码
- CSRF 演示过程
- 服务启动
- 演示
CSRF(跨站请求伪造)攻击演示
CSRF 是什么
CSRF(Cross-Site Request Forgery)跨站请求伪造,是一种网络安全攻击,其目标是利用被攻击者在某个网站的身份(通常是通过 cookie 认证)来伪造被攻击者的请求,以执行某些未经授权的操作。
攻击步骤通常包括以下几个阶段:
- 登录受害者:攻击者诱使受害者登录到一个受信任的网站,并在受信任网站上保留了他们的身份认证凭据(比如 cookie)。
- 构造恶意请求:攻击者在其控制的网站上嵌入了一些恶意代码或链接,这段代码或链接会向目标网站发送请求,利用受信任网站上受害者的身份。
- 发起攻击:受害者在已经登录了的情况下,访问包含恶意代码的页面,这将导致向目标网站发送伪造的请求,执行某些未经授权的操作。这可能包括更改密码、发起转账、删除帐户等。
CSRF 演示项目代码
演示代码:github - csrf-demo
项目目录如下:

其中业务后端 CsrfController.java 代码为:
package com.fhb.csrfdemo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@RestController
@RequestMapping("/")
public class CsrfController {@GetMapping("/trans")public String trans(HttpServletRequest request, String name, Integer money) {HttpSession session = request.getSession();Object people = session.getAttribute("people");if (people == null) return "没有登录";System.out.println("给" + name + "转账" + money + "元");return "转账成功";}@GetMapping("/login")public String login(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("people", "people");return "登录成功";}
}
业务前端代码较为简单,代码为:
<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><h1>CSRF 攻击测试</h1><button onclick="trans()">转账</button><button onclick="login()">登录</button><a href="http://localhost:18080">恶意链接</a>
</body><script lang="js">async function trans() {const response = await fetch("/trans?name=fhb&money=100");const info = await response.text();alert(info);}async function login() {const response = await fetch("/login");const info = await response.text();alert(info);}
</script>
</html>
恶意网站仅为一个 html 文件:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h1>CSRF攻击软件</h1><img src="http://localhost:8080/trans?name=fff&money=10" alt="xxx" srcset="">
</body><script>
</script>
</html>
CSRF 演示过程
服务启动
-
启动 java 程序 CsrfDemoApplication,该 Spring Boot 服务将在 8080 端口提供服务;
-
通过 npm 安装 http-server,进入 malicious-web 文件夹, 通过
http-server . -p 18080启动攻击者网站;
业务网站 ui 如下:

演示
通过 http://localhost:8080 访问目标网站。
- 如果直接点击 “转账” 按钮,将弹出提示框,提示 没有登录 ;
- 如果点击 “登录”,弹出提示框,提示 登录成功,之后点击转账,提示 转账成功,并且在后端打印 给fhb转账100元;
- 在第2步的基础上,点击 “恶意连接”,将跳转到攻击者网站,并且在后端打印 给fff转账10元,表示攻击成功。
相关文章:
CSRF(跨站请求伪造)攻击演示
目录 CSRF(跨站请求伪造)攻击演示CSRF 是什么CSRF 演示项目代码CSRF 演示过程服务启动演示 CSRF(跨站请求伪造)攻击演示 CSRF 是什么 CSRF(Cross-Site Request Forgery)跨站请求伪造,是一种网络安全攻击,其目标是利用被攻击者在…...
图解三傻排序 选择排序、冒泡排序、插入排序
(1)选择排序 // 交换 void swap(int arr[], int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; }// 选择排序 void selectionSort(int arr[],int len) {if (len < 2) return;for (int minIndex, i 0; i < len - 1; i) {minIndex i;f…...
【数据结构】树与二叉树(六):二叉树的链式存储
文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语5.1.4 树的表示 5.2 二叉树5.2.1 二叉树1. 定义2. 特点3. 性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉…...
后端Java日常实习生面试(2023年11月10日)
面试岗位为:Java 后端开发实习生 面试时长:30分钟 面试时间:2023年11月10日 首先介绍一下项目吧 这里介绍时有一个失误,没有主动把屏幕共享给打开,因为我在面试之前已经在 processon 上画好了项目的流程图…...
使用iperf3在macOS上进行网络性能测试
iperf3是一个用于测量网络性能的工具,它可以帮助你了解两台服务器之间的带宽和延迟。本博客将指导你在macOS上安装iperf3,并展示如何连接服务器进行网络性能测试。 步骤1:安装Homebrew 如果你尚未安装Homebrew,可以通过以下步骤…...
09-MySQL主从复制
01-主从复制原理 MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志(Binary Log)来将主数据库上的更改操作同步到一个或多个从数据库。 MySQL主从复制的基本原理如下: 主服务器(Master࿰…...
virtualBox虚拟机局域网访问配置
在VirtualBox中,桥接网络是一种网络连接类型,它允许虚拟机连接到物理网络上的路由器或交换机,在物理网络上获得独立的网络地址和访问权限。 一、设置VirtualBox桥接网络的步骤: 打开VirtualBox软件,并选择你想要配置…...
IDEA高效编程快捷键
IDEA高效编程快捷键 for循环快捷键 快速生成for循环 foriTABfor (int i 0; i < ; i) {}在for循环中使用索引 iterTABfor (String s : list) {}在for循环中进行if条件判断 ifnTABif (list null) {} soutTAB快捷键 System.out.println();psfEnter快捷键 p…...
nginx实现vue和后端的双机负载
nginx配置文件,项目是前后端分离的,前端vue,后端springboot 前端使用nginx实现双机负载,前端的访问端口是95280,后端2个服务实例的端口分部为9098,9099 nginx.conf的配置文件 #user root; worker_processes 1;#err…...
ARMday03(寄存器读写、栈、程序状态寄存器、软中断和异常、混合编程)
单寄存器内存读写指令 将一个寄存器中的数值写入到内存,或者从内存中读取数据放在某一个指定寄存器中 指令码和功能 1.向内存中写: str{条件码} 目标寄存器,[目标地址]:将目标寄存器的4字节数值写入到目标地址为首地址的空间中 strh{条件码…...
Excel中功能区的存放位置很灵活,可以根据需要隐藏或显示
在这个简短的教程中,你将找到5种快速简单的方法来恢复Excel功能区,以防丢失,并学习如何隐藏功能区,为工作表腾出更多空间。 功能区是Excel中所有操作的中心点,也是大多数可用功能和命令所在的区域。你觉得功能区占用了你太多的屏幕空间吗?没问题,只需单击鼠标,它就被隐…...
HelloGitHub 社区动态,开启新的篇章!
今天这篇文章是 HelloGitHub 社区动态的第一篇文章,所以我想多说两句,聊聊为啥开启这个系列。 我是 2016 年创建的 HelloGitHub,它从最初的一份分享开源项目的月刊,现如今已经成长为 7w Star 的开源项目、1w 用户的开源社区、全网…...
【学术综述】-如何写出一篇好综述-写好综述要注意的问题
文章目录 1.前置1.1 SSD 的结构1.2 FTL的架构和作用 2 动机-why?3 做了什么【做了哪些方面的survey】?4 背景知识【上下文】5 研究的问题6 每个问题对应的解决方案 从昨天晚上【2023.11.09 22:00】到今天22:29的,花了一天的时间在读这篇surve…...
ClickHouse介绍和使用
ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区(可选)4.3.2. primary key 主…...
数码管动态扫描
/*----------------------------------------------- 内容:数码管使用动态扫描显示,所以可以同时看到数码管同时显示数字或者字符。 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不…...
Webpack 中 loader 的作用是什么?常用 loader 有哪些?
说说webpack中常见的Loader?解决了什么问题?- 题目详情 - 前端面试题宝典 1、loader 是什么 loader是 webpack 最重要的部分之一。 通过使用不同的 loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理。 loader…...
c#,字段和属性的区别
c#,string test和string test{ges;set;}有什么区别 在C#中,string test和string test { get; set; }表达了两种不同的成员声明,它们在类中的作用和访问方式是不同的。 string test: 这是一个字段(field)声明。它声明了一个类型…...
ideal一键部署SpringBoot项目jar包到服务器
一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包,然后连接linux服务器,将jar手动上传到服务中,重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…...
宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017
1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…...
K8S篇之简述K8S底层原理
k8s底层原理 Kubernetes(简称k8s)是一个开源的容器编排平台,它可以自动化地部署、扩展和管理容器化应用程序。 Kubernetes 底层原理是其能够实现这些功能的关键。 1 节点和控制平面 Kubernetes 由两个主要组件组成:节点Node和控…...
科研效率提升:如何用Zotero插件批量追踪文献引用量?
科研效率革命:用Zotero Scholar Citations打造智能文献追踪系统 在科研工作中,文献引用量不仅是学术影响力的直观体现,更是研究者评估自身成果价值的重要指标。传统手动查询方式效率低下,而Zotero Scholar Citations插件则为这一痛…...
革命性PCB缺陷检测数据集:DeepPCB如何重塑电子制造业质量标准
革命性PCB缺陷检测数据集:DeepPCB如何重塑电子制造业质量标准 【免费下载链接】DeepPCB A PCB defect dataset. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPCB 在电子制造业的精密世界中,PCB(印刷电路板)的微小缺陷…...
预算为0也能上系统?揭秘私藏的5个“零成本”数字化神器
这些年我陆续接触了不少低代码产品,最终沉淀下来的这五款,各自解决了一类典型问题。璞华易构:把流程管理还给业务人员第一,拖拽式表单编辑器,运营、财务十分钟就能搭出带校验的申请单,不用等IT排期。第二&a…...
【限时首发|Loom安全迁移黄金72小时】:20年JVM专家手把手带你完成存量Spring Boot项目响应式重构+全链路安全加固(含自动化检测脚本)
第一章:Loom安全迁移黄金72小时:战略认知与风险全景图Loom 的虚拟线程(Virtual Threads)并非简单替代传统线程的“语法糖”,而是一次JVM调度模型的根本性重构。在迁移窗口开启的前72小时,团队必须完成从“线…...
别再死记硬背InceptionV3结构了!从四大设计原则出发,手把手教你设计自己的高效CNN模块
从InceptionV3四大设计原则到高效CNN模块实战指南 当你在GitHub上搜索"CNN架构复现"时,会发现90%的代码仓库都在机械复制网络结构图。这种知其然不知其所以然的学习方式,正是阻碍开发者真正掌握神经网络设计精髓的症结所在。本文将带您跳出结构…...
MIL-101(Cr)@Fe₃O₄ NPs,MIL-101(Cr)修饰四氧化三铁纳米颗粒,化学结构特点
MIL-101(Cr)Fe₃O₄ NPs,MIL-101(Cr)修饰四氧化三铁纳米颗粒,化学结构特点MIL-101(Cr)Fe₃O₄ NPs(MIL-101(Cr)修饰四氧化三铁纳米颗粒)是一类典型的磁性核–多孔框架壳层复合纳米体系,其化学结构特点主要体现在“Fe₃…...
【2026-MobaXterm_Personal_26.0 部署与使用教程】
MobaXterm_Personal_26.0 部署与使用教程 MobaXterm 是 Windows 下极其强大的终端工具,Personal(个人免费版)已经包含了 SSH、X11 Server、SFTP 等绝大多数核心功能,非常适合开发者和运维人员使用。 📋 准备工作 在开始之前,你需要确认以下两点: 操作系统:Windows 7/…...
前端三大核心技术语言
前端开发涉及的编程语言主要可分为核心标记/样式语言、核心脚本语言及其增强/替代方案,以及辅助/全栈语言。其核心生态、优势及典型应用场景对比如下: 语言类别具体语言核心定位与优势典型应用场景核心标记/样式语言HTML (HTML5)网页内容与结构的骨架&a…...
YOLO26落石滑坡识别检测系统:从数据集构建到地质灾害自动定位的全流程实现(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)
摘要 落石与滑坡是我国山区常见的地质灾害类型,具有突发性强、破坏性大、监测预警困难等特点,严重威胁山区公路、铁路及居民点安全。针对传统人工巡查效率低、传感器监测成本高等问题,本文提出了一种基于改进YOLO26的目标检测方法࿰…...
React 多标签页同步:利用 SharedWorker 在多个 React 实例间共享持久化 WebSocket 连接
嘿,各位前端界的“码农”们,以及那些自认为“码农”但实际上只是“复制粘贴侠”的朋友们,大家好!今天我们不聊那些花里胡哨的 CSS 动画,也不聊那些让你头发掉光的 TypeScript 泛型。今天,我们要聊聊一个稍微…...
