CSRF漏洞学习总结

一、什么是CSRF漏洞?

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击,它利用受害者在受信任网站上的已认证会话,来执行非预期的行动。这种攻击的核心在于,攻击者能够诱使受害者的浏览器向一个他们已经登录的网站发送恶意构造的请求,而该网站会错误地认为这个请求是用户有意发起的。

1.1原理

当用户成功登录一个网站时,服务器会返回该用户的“身份证”,也就是cookie。当用户后续进行操作时,浏览器会自动添加上这个cookie,服务器收到数据包后就会对cookie进行验证,确保是用户进行的操作。攻击者伪造一个网站,通过钓鱼等手段使受害者访问这个网站,如果受害者此时正在访问有csrf的网站,当用户点击假网站的按钮时,浏览器就会将该请求带上cookie,发送给服务端,而此时服务端认为是用户的操作。

二、实际攻击例子

场景设定

假设有一个在线银行系统 bank.example.com,它存在一个未修复的CSRF漏洞。用户可以通过访问 /updateprofile.php 页面来更新他们的个人资料,但该页面没有适当的CSRF防护机制。

攻击准备

  1. 创建恶意网站:攻击者首先创建了一个看似合法的网站,可能是模仿了银行的登录界面或提供某种“安全更新”服务的页面。
  2. 构造CSRF攻击向量:在恶意网站中嵌入一个HTML表单或者通过JavaScript自动提交的代码,就像之前讨论过的那样。这个表单的目标是银行的 /updateprofile.php,并且包含了攻击者想要更改的信息,例如用户的电子邮件地址、密码提示问题等。
  3. 伪装钓鱼邮件:攻击者设计了一封看起来像是来自银行的紧急通知邮件,告知用户有关账户的安全问题,并要求他们立即采取行动。

钓鱼邮件内容示例

主题: 紧急:您的银行账户需要立即验证!

亲爱的客户,

我们检测到您的账户可能存在异常活动。为了确保您的账户安全,请立即点击下面的链接进行验证。

[立即验证账户] (http://malicious-site.example)

如果您最近没有尝试过任何更改,请尽快执行此操作以保护您的账户。感谢您对我们服务的支持。

祝好,
Bank Example 客户服务团队

CSRF攻击向量(恶意网站中的HTML/JavaScript)

<html>
  <body onload="document.getElementById('csrfForm').submit()">
    <form id="csrfForm" action="https://bank.example.com/updateprofile.php" method="POST">
      <input type="hidden" name="email" value="attacker@example.com" />
      <input type="hidden" name="passhint" value="What is the capital of France?" />
      <!-- 其他需要修改的字段 -->
    </form>
    <p>请稍候,正在验证您的账户...</p>
  </body>
</html>

在这个例子中,当受害者点击了钓鱼邮件中的链接并访问了恶意网站时,页面会自动加载并提交一个指向银行服务器的表单请求。如果受害者在同一浏览器中已经登录到了真正的银行网站,那么这个请求将会携带有效的会话Cookie,从而导致银行服务器认为这是一个合法的请求,并按照提供的数据更新受害者的账户信息。

三、靶场实验

这次实验使用OWASP发行的Broken Web Application进行演示。

https://sourceforge.net/projects/owaspbwa/

点击下载,在vmware中打开虚拟机文件即可。

在浏览器访问提示的网址

选择GETBOO

点击右上角的"Log In",使用user,user登录

点击右上角的“Settings”

选择“Modify account information”功能,这里可以修改用户邮箱

开启bp抓包之后,点击"Updates",可以看到需要修改的邮箱账号

右键利用工具生成POC

修改需要绑定的邮箱,这里改为“kimjiwon”

复制生成的HTML,在桌面新建一个HTML文件,放进去

使用你打开靶场的浏览器打开(不同浏览器无法利用cookie),这个页面相当于恶意网站

点击按钮,发现无意中发送了修改邮箱的请求

到此,攻击者已经实现攻击目的了,在受害者没有察觉的情况下修改了邮箱。利用这种手段,攻击者可以执行其他操作如修改密码等。

四、防御措施

1. 使用CSRF令牌

  • 生成唯一的CSRF令牌:对于每个用户会话或表单提交,服务器应该生成一个独一无二的、不可预测的CSRF令牌。
  • 将令牌嵌入到表单中:这个令牌作为一个隐藏字段包含在每个需要保护的HTML表单中。
  • 验证令牌:当接收到来自客户端的POST请求时,服务器必须检查该请求是否包含了正确的CSRF令牌,并且它与当前用户的会话相匹配。如果不匹配,则拒绝处理该请求。

2. 设置SameSite Cookies属性

  • 启用SameSite属性:通过设置Cookies的SameSite属性为StrictLax,可以限制Cookies只在同站请求中发送。这有效地阻止了大多数类型的CSRF攻击,因为跨站请求不会附带敏感的认证信息。
    • SameSite=Strict:Cookies仅在直接导航(如用户手动输入URL或点击书签)时才会被发送。
    • SameSite=Lax:允许某些跨站顶级导航请求(如GET请求)发送Cookies,但禁止通过iframe等嵌入式上下文中的跨站请求发送Cookies。

3. 检查Referer和Origin头部

  • 验证来源:检查refer是否是第三方网站发起的。尽管不是最可靠的防御机制,因为refer的内容可以被修改,但检查HTTP请求中的RefererOrigin头部可以帮助识别潜在的CSRF攻击。合法请求通常会有正确的来源信息,而恶意请求可能会缺少或有不匹配的来源信息。

4. 使用框架内置的CSRF防护功能

  • 利用现有工具:许多现代Web开发框架(如Django、Rails、ASP.NET Core等)都内置了CSRF防护功能。确保正确配置并使用这些框架提供的安全特性。

5. 实现基于用户交互的二次确认

  • 增加额外步骤:对于特别敏感的操作,比如更改密码或电子邮件地址,要求用户提供额外的验证信息,如重新输入密码或通过短信验证码进行二次确认。

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

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

相关文章

模型剪枝及yolov5剪枝实践

文章目录 1、模型剪枝1、 稀疏化训练2、模型剪枝2.1 非结构化剪枝2.2 结构化剪枝2.3 一些疑惑&#xff1a;2.3.1 剪枝后参数量不变&#xff1f; 3、微调 【结构化剪枝掉点太多&#xff0c;不如一开始就选个小模型训练。非结构化剪枝只是checkpoint文件变小了&#xff0c;推理速…

黑马程序员C++ P1-P40

一.注释和常量 1.多行注释&#xff1a;/*...............*/ ; 单行注释&#xff1a;//.............. 2.常量&#xff1a;用于记录程序中不可修改的量 。定义方式&#xff1a;宏常量#define定义在文件上方 ;const修饰变量 3.标识符命名规则&#xff1a;标识符不能是关键字&a…

Airflow:BranchOperator实现动态分支控制流程

Airflow是用于编排复杂工作流的开源平台&#xff0c;支持在有向无环图&#xff08;dag&#xff09;中定义、调度和监控任务。其中一个关键特性是能够使用BranchOperator创建动态的、有条件的工作流。在这篇博文中&#xff0c;我们将探索BranchOperator&#xff0c;讨论它是如何…

怎么使用CRM软件?操作方法和技巧有哪些?

什么是CRM&#xff1f; 嘿&#xff0c;大家好&#xff01;你知道吗&#xff0c;在当今这个数字化时代里&#xff0c;我们每天都在与各种各样的客户打交道。无论是大公司还是小型企业&#xff0c;都希望能够更好地管理这些关系并提高业务效率。这时候就轮到我们的“老朋友”——…

java开发,IDEA转战VSCODE配置(mac)

一、基本java开发环境配置 前提&#xff1a;已经安装了jdk、maven、vscode&#xff0c;且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置&#xff0c;也可以在setting.json文件中直接编辑&…

AI模型提示词(prompt)优化-实战(一)

一、prompt作用 用户与AI模型沟通的核心工具&#xff0c;用于引导模型生成特定内容、控制输出质量、调整行为模式&#xff0c;并优化任务执行效果&#xff0c;从而提升用户体验和应用效果 二、prompt结构 基本结构 角色&#xff1a;设定一个角色&#xff0c;给AI模型确定一个基…

Unreal Engine 5 C++ Advanced Action RPG 十章笔记

第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…

设计模式的艺术-代理模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解代理模式 代理模式&#xff08;Proxy Pattern&#xff09;&#xff1a;给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 代理模式类型较多…

每日一题洛谷P1423 小玉在游泳c++

#include<iostream> using namespace std; int main() {double s;cin >> s;int n 0;double sum 0;double k 2;while (sum < s) {sum k;n;k * 0.98;}cout << n << endl;return 0; }

Python3 OS模块中的文件/目录方法六

一. 简介 前面文章简单学习了Python3中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS模块中文件、目录的操作方法。 二. Python3 OS模块中的文件/目录方法 1. os.lseek() 方法、os.lstat() 方法 os.lseek() 方法用于在打开的文件中移动文件指针的位置。在Unix&#…

HTB:Heist[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用smbclient匿…

【HarmonyOS NEXT】华为分享-碰一碰开发分享

关键词&#xff1a;鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享&#xff0c;支持用户通过手机碰一碰发起跨端分享&#xff0c;可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可&#xff0c;无需对 U…

使用Inno Setup软件制作.exe安装包

1.下一步&#xff1a; 2. 填写 程序名字 和 版本号&#xff1a; 3.设置安装路径信息 4.添加要打包的exe和依赖文件 5.为应用程序创建关联的文件 如果不需要就直接取消勾选 6.创建快捷方式 &#xff08;1&#xff09;第一种&#xff1a;常用 &#xff08;1&#xff09;第二种&am…

CPU 缓存基础知识

并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图&#xff0c;简单的代码&#xff0c;来认识CPU以及一些常见的问题。 目录 CPU存储与缓存的引入常见的三级缓存结构缓存一致性协议MESI协议缓存行 cache line 通过代码实例认识缓存行的重要性 CPU指令的乱序执行通过…

初步搭建并使用Scrapy框架

目录 目标 版本 实战 搭建框架 获取图片链接、书名、价格 通过管道下载数据 通过多条管道下载数据 下载多页数据 目标 掌握Scrapy框架的搭建及使用&#xff0c;本文以爬取当当网魔幻小说为案例做演示。 版本 Scrapy 2.12.0 实战 搭建框架 第一步&#xff1a;在D:\pyt…

Python - itertools- pairwise函数的详解

前言&#xff1a; 最近在leetcode刷题时用到了重叠对pairwise,这里就讲解一下迭代工具函数pairwise,既介绍给大家&#xff0c;同时也提醒一下自己&#xff0c;这个pairwise其实在刷题中十分有用&#xff0c;相信能帮助到你。 参考官方讲解&#xff1a;itertools --- 为高效循…

YOLO-cls训练及踩坑记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、模型训练 二、测试 三、踩坑记录 1、推理时设置的imgsz不生效 方法一&#xff1a; 方法二&#xff1a; 2、Windows下torchvision版本问题导致报错 总结 前…

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…

PAT甲级-1017 Queueing at Bank

题目 题目大意 银行有k个窗口&#xff0c;每个窗口只能服务1个人。如果3个窗口已满&#xff0c;就需要等待。给出n个人到达银行的时间和服务时间&#xff0c;要求计算每个人的平均等待时间。如果某个人的到达时间超过17:00:00&#xff0c;则不被服务&#xff0c;等待时间也不计…

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集&#xff08;关键&#xff09;&#xff01;4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…