【技术分享】从开发角度浅谈CSRF攻击及防御

CSRF漏洞详解,一文看懂CSRF 0x00:CSRF 简述 CSRF(Cross Site Request Forgery,跨站请求伪造),字面理解意思就是在别的站点伪造了一个请求。专业术语来说就是在受害者访问一个网站时,其 Cookie 还没有过期的情况下,攻击者伪造一个链接地址发送受害者并欺骗让其点击,从而形成 CSRF 攻击。 0x01:CSRF 案例 受害者 (A) 登录了某个银行给朋友 (B) 转账,其转账操作发送... 阅读详情

https://i-blog.csdnimg.cn/blog_migrate/e19cb18eed6461fa16c905489798474d.jpeg

什么是CSRF


CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去--购买商品、发邮件,恶意的去消耗账户资源,导致的一些列恶意行为.CSRF可以简单分为Get型和Post型两种。

Get型CSRF:

看到这个名字,很明显是发送GET请求导致的。我这里简单的说一下:GET型的CSRF利用非常简单,通常只要发送一段HTTP请求。简单的说,如果一个网站某个地方的功能,比如(用户修改自己邮箱)是通过GET进行请求修改的话。

如下例:

http://bobao.360.cn/user.php?id=226&email=226@226.com  //这里我们可以看出这个网址是通过get型去对用户的邮箱进行修改。后面&email=226@226.com 是关键的地方。当我们发现没有做任何处理之后,我们将可以去构造一段代码。

只要把它email参数后面的值进行修改。。之后构造一个代码,或者直接一串URL发过去(正常人应该不会这样)。如下例:

http://bobao.360.cn/user.php?id=226&email=226@qq.com  //只要这个id的用户触发了这URL即可成功修改。攻击者可自行修改id,发送该id用户也可以修改。触发后即可成功修改到这个用户的email。

POST型CSRF

POST型CSRF简单来说,通过POST请求去触发代码造成漏洞。还是一样,举个例子 比如在一个教育视频网站平台。在普通用户的眼中,点击网页->打开试看视频->购买视频 是一个很正常的一个流程。可是在攻击者的眼中可以算正常,但又不正常的,当然不正常的情况下,是在开发者安全意识不足没有进行处理所造成。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。

比如:http://bobao.360.cn/coures/user/handler/25332/buy.php //通过buy.php处理购买(购买成功)的信息,这里的25532为视频ID

那么攻击者现在构造一个表单(form.html),如:

1
2
3
4
    <form action="http://bobao.360.cn/coures/user/handler/25332/buy.php" method="post">
       <input type="submit" value="提交" />
<script> document.forms[0].submit(); </script> //自动提交
        </form>

构造好form表单后,那么攻击者将form.html上传至一台服务器上,将该页面 如:http://bobao.360.cn/form.html 

发送给受害者,只要受害者正在登陆当前教育网站的时候,打开攻击者发送的页面,那么代码则自动触发,自动购买了id为25332的视频。从而导致受害者余额扣除,被攻击者恶意消耗用户余额。如果网站很不严谨,那么只要把id改了,就可以任意的去恶意购买任何视频。消耗受害者的财产,从而导致用户财产安全受影响。


CSRF的原理


发现漏洞可利用处->构造(搭建)搭建代码->发送给用户(管理员)->触发代码(发送请求).........

从这个利用的一个流程中,我们可以发现,攻击者仅仅只是做了两处工作.第一处是:发现漏洞利用处,,第二处就是构造利用代码以及发送至用户(管理员)。至于利用,你会发现CSRF与XSS不同,XSS是攻击者自己提交,等待结果,而CSRF呢,是由用户(管理员)自身提交。甚至可以说攻击者只做了构造代码的工作。


在开发中如何简单防御CSRF(PHP)


其实防御CSRF有很多种 如:验证码、验证Refer、以及验证token,对特殊参数进行加密。

但是如果使用验证码去避免CSRF的话,那么这样会验证的影响用户的体验,因为用户不会每个操作都去输入验证码(会很烦)。

Refer的话在特殊情况下也是不靠谱的(服务器端出的问题)。

那么目前只有token是被大多网站去使用的。因为可以避免用户体验的问题发生。同样服务器边问题也发生也不会很多。

那么接下来就开始介绍在PHP开发中如何去简单的生成token,避免CSRF。我们可以通过PHP中函数(rand生成随机数+uniqid生成一个唯一id+time时间戳)最后在讲这几个生成的值用md5加密。接下来来说说如何去生产:

首先先开启session会话

1
session_start(); //开启session会话

然后我们去随机生成一段值(这个值就是我们的token值) 备注:其实这样子生成不是最严谨的(此次只是大家一起交流。大家可以去尝试各种方式。)

1
$safe226 = md5(time() . uniqid() . rand(1,99999)); //输入一个随机数值

我们输出看看

 

t010e782d62b0f4807c.png

接下来,我们需要做的就是把生成出来的token丢进咱们的session里面。

t01b4f6885fa9bb6adc.png

 

接下来你们应该知道了,我们验证的其实是我们存到session里面的token是否与用户提交上来的token值一致。如果一致则成功,否则则失败。我们准备一个表单,用于传递用户提交请求的一个token。

1
<input type="hidden" value="<?php echo $_SESSION['226_tonken']; ?>">

t0192b1e472eb5d9932.png

我们把token提交到test.php里去处理!

其实就是将我们丢进session里面的值丢进隐藏表单里面。当用户提交的时候一起提交过来验证,验证是否与session里面的token相同。

我们来感受下。

http://p7.qhimg.com/t01e7cf99fe2b5ee6cb.png

 

Ok,接下来我们只需要去判断用户传递过来的token值是否和session里面的值一致(这里使用简单判断,其实原理都是一样的。

1
2
3
4
5
6
7
8
9
10
if(isset($_SESSION['226_token']) && isset($_POST['token'])){
if($_SESSION['226_token'] === $_POST['token']){
//这里是验证成功后所写代码 
echo '购买成功';  
}else{
echo '请勿非法操作!判断是否一致';
}
}else{
echo '请勿非法操作!判断是否存在';
}

接下来,我们利用下。这里已知道结构。所以直接构造一个表单。

根据代码情况 就是当我们构造的利用代码,没有传递token或者token不一致的时候:

1
2
3
<form action="http://127.0.0.1/test/test.php" method="post">
<input type="submit" value="提交" />
</form>

http://p0.qhimg.com/t0164ca988baa57eaff.png

这里两个打印是在test.php里面打印 没有去掉print_r(无视就好),当利用时候会发现没有传递token过去。会提示。错误!

接下来我们来看,完全一致的时候。会提示的是什么:

t01a0e4ecebd574ec42.png 

当我们通过验证的时候。你会发现已经验证成功。购买成功。

好了。文章到此结束。希望大家多多交流!!!

本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3061.html

跨域与CSRF攻击 作者:刘旭濠 跨域每个程序员都要掌握的一门知识,其实我一开始也不知道什么是跨域甚至是第一次听到好奇这是啥玩意(毕竟我还是小白一个)不过看了网上一堆资料虽然有点乱但是还是理解了一些,那么我来分享一下我的理解吧,那么什么是跨域,跨域就是指浏览器不能执行其他网站脚本,是对浏览器对JavaScript加的安全限制,为什么要限制呢,那就是怕CSRF攻击,至于CSRF攻击是什么接下来也会讲到的。 那么我就这样... 阅读详情

相关推荐

burpsuite csrf攻击_WEB安全之CSRF

大家好,我是阿里斯,一名IT行业小白。今天分享的内容是CSRF相关知识,不求表哥们打赏,只求点点在看,点点转发。CSRF漏洞概述CSRF(Cross-Site Request Forgery),中文名为跨站请求伪造,是一种Web攻击方式。该漏洞是一种挟持用户在当前已登录的Web应用程序上执行非本意操作的攻击方法。通俗点说就是恶意攻击者窃取了你在某个网站的身份,以你的名义发送恶意请求。CS...

weixin_34083972的博客 1208

CSRF漏洞原理攻击与防御(非常细)

CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。

m0_61869253的博客 3722

DVWA靶场实战:CSRF漏洞原理、攻击与防御全解析

跨站请求伪造(CSRF)是一种常见的Web安全漏洞,其核心原理在于攻击者能够利用用户在当前网站的已登录状态,诱骗浏览器向目标站点发起非预期的恶意请求。这种攻击之所以能够成功,关键在于浏览器默认会在请求中自动携带与目标域名关联的Cookie等身份凭证,而服务器端若缺乏对请求来源的有效验证,便会将其误判为用户的合法操作。从技术价值看,理解CSRF的运作机制是构建安全Web应用的基石,它直接关系到用户会话管理和敏感操作(如修改密码、资金转账)的授权逻辑。在应用场景上,无论是社交网络、电子商务还是在线银行,任何依赖

535

实验3:跨站攻击CSRF

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。与xss的区别:csrf是借助用户的权限完成攻击,攻击者并没有拿到权限;而xss是直接盗取用户权限去进行破坏。先修改等级为low进入到CSRF页面查看网页源代码可以看到并没有隐藏的token。

weixin_52363821的博客 1951

CSRF攻击原理与防御实战:从Token到SameSite Cookie的全面防护

Web安全是构建可信网络应用的基础,其中身份认证与授权机制尤为关键。CSRF(跨站请求伪造)攻击正是利用了浏览器在HTTP请求中自动携带Cookie等认证凭证的机制,诱使用户在不知情的情况下执行非本意操作。其技术原理在于攻击者构造恶意请求,借助用户已登录的会话状态,绕过身份验证直接执行敏感操作。这种攻击的价值在于揭示了单纯依赖Cookie进行会话管理的安全缺陷,促使开发者必须实施额外的请求来源验证。在应用场景上,任何涉及状态变更的Web操作,如金融转账、密码修改、数据提交等,都可能成为CSRF的攻击目标。针

weixin_34209851的博客 352

Web安全实战:XSS与CSRF攻击原理与综合防御方案

Web安全是构建可信网络应用的基础,其核心在于理解并防范常见的客户端攻击。从原理层面看,攻击者常利用浏览器对用户输入和请求的信任机制实施入侵。XSS(跨站脚本攻击)通过注入恶意脚本,在受害者浏览器中执行非授权操作,其变种包括反射型、存储型和DOM型,危害涉及会话劫持与数据泄露。CSRF(跨站请求伪造)则利用用户已建立的会话凭证,诱骗浏览器发起非自愿的敏感请求。在技术价值上,构建纵深防御体系能有效保障用户数据与业务逻辑安全。应用场景覆盖电商、社交、金融等所有涉及用户交互的Web系统。本文聚焦XSS与CSRF这

weixin_29327525的博客 262

CSRF攻击方式

来源:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html 一.CSRF是什么?   CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么?   你这可以这么理...

weixin_30885111的博客 486

WEB漏洞——CSRF

这次我来讲讲web漏洞的CSRF笔记总结,主要通过原理、类型、示例以及防御的角度展开说明,希望读者受益。CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF,是一种对网站的恶意利用。CSRF是通过伪装用户的请求来利用网站,利用网站漏洞从用户那里盗取信息说白了,就是攻击者盗用了你的身份,以你的名义发送恶意请求。

qq_63594215的博客 1339

网络安全之CSRF漏洞原理和实战,以及CSRF漏洞防护方法

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。

Scalzdp的专栏 4989

dbt+Snowflake实战:数据建模、权限隔离与性能优化全指南

dbt(data build tool)作为现代数据栈的核心建模工具,其与Snowflake的深度协同远不止于SQL编译执行——它本质是将软件工程实践(如版本控制、测试驱动、CI/CD)注入数据交付流程。理解dbt的声明式建模原理与Snowflake的虚拟仓库、Time Travel、TRANSIENT表、聚簇键等底层机制如何咬合,是实现可维护、可审计、低成本数据产品交付的关键。本文聚焦dbt在Snowflake环境中的真实落地挑战,涵盖schema与warehouse的物理映射设计、role级硬隔离策略、

weixin_34389926的博客 312

利用Nginx反向代理实现GitLab自定义域名的高效配置

本文详细介绍了如何利用Nginx反向代理实现GitLab自定义域名的高效配置。通过统一域名管理、性能优化和安全加固,提升GitLab的访问效率和安全性。文章包含前期准备、GitLab基础配置、Nginx反向代理设置及常见问题排查,帮助开发者快速完成部署。

weixin_28834169的博客 164

csrf攻击防御 php,【技术分享】从开发角度浅谈CSRF攻击及防御

什么是CSRFCSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去–购买商品、发邮件,恶意的去消耗账户资源,导致的一些列恶意行为.CSRF可以简单分为Get型和Post型两种。Get型CSRF:看到这个名字,很明显是发送GET请求导致的。我这里简单的说一下:GET型的CSRF利用非常简单,通常只...

weixin_30213477的博客 274

stm32H743IIT6 cubemx HAL USB UVC摄像头基础

stm32性能已经很强了, 可以驱动ov5640摄像头, 所以可以把摄像头接在stm32上, 当作一个摄像头驱动器, 连接到电脑上 开发环境: stm32cubemx 6.0.1 单片机: 自己做的stm32h743iit6核心板,兼容正点原子 学习资料: 圈圈学USB 鱼鹰谈单片机 从零开始学习USBhttps://to-run-away.blog.youkuaiyun.com/article/details/85038393 整个项目是基于CDC串口上修改 1 stm32 USB 代码概览 ..

紫枫洛天的博客 7750

前端安全:XSS和CSRF攻击的防御策略

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。干货主要有:①1000+CTF历届题库(主流和经典的应该都有了)②CTF技术文档(最全中文版)③项目源码(四五十个有趣且经典的练手项目及源码)

ZL_1618的博客 1265

MTK metadata中AF模块的移除与配置调整

本文详细介绍了在MTK平台Camera开发中如何移除metadata中的AF(自动对焦)模块。通过系统清理MTK_CONTROL_AF_REGIONS、MTK_CONTROL_MAX_REGIONS等关键配置项,并调整对焦模式及硬件特性声明,确保定制化设备在禁用自动对焦功能后的稳定运行。

q1w3e5r7t9y的博客 570

开源TMS系统cortex-tms私有化部署与二次开发实战指南

运输管理系统(TMS)是现代物流数字化的核心组件,它通过将线下零散的物流操作转化为线上标准化、可追溯的数据流,实现订单、调度、跟踪与结算的全流程管理。其技术原理通常基于微服务架构,采用Spring Boot、Vue.js等成熟技术栈构建,确保系统的稳定性和可扩展性。TMS的技术价值在于显著提升物流企业的运营效率、降低成本并增强过程可控性,尤其适用于中小型物流企业实现从手工管理到系统化管理的跨越。在应用场景上,TMS广泛应用于车队管理、订单跟踪和财务结算等环节。本文聚焦于开源TMS项目cortex-tms,深

weixin_42523907的博客 746

从开发角度浅谈CSRF攻击及防御

CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去--购买商品、发邮件,恶意的去消耗账户资源,导致的一些列恶意行为.CSRF可以简单分为Get型和Post型两种。  开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享什么是CSRFCSRF可以叫做(跨站请求伪造),咱们可以这...

专注基础架构领域 464

YOLOv8改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 1081

一文读懂跨站请求伪造(CSRF)攻击及防御--安全基础系列

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。干货主要有:①1000+CTF历届题库(主流和经典的应该都有了)②CTF技术文档(最全中文版)③项目源码(四五十个有趣且经典的练手项目及源码)

qq_44005305的博客 614

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

为了确保内存能够正确识别总线的信号控制位,新增一个TrustZone地址空间控制器(TrustZone Address Space Controller,TZASC)组件来实现对内存地址的安全扩展,将内存区域划分为安全内存区域和非安全内存区域,安全世界可以访问安全内存和非安全内存,而普通世界只能访问非安全内存,如下图所示:图 1-1内存区域的划分是在系统启动时通过配置 TZASC 组件(TZC-400/TZC-380)来实现的。TZC-400由和使能情况;安全访问权限;Base地址;

CodingCos的博客 1633

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

Nginx配置实战:三层策略防御CSRF攻击,为应用安全加固网关防线

跨站请求伪造(CSRF)是一种常见的Web安全威胁,攻击者利用用户已登录的会话状态,诱导其浏览器向目标网站发送恶意请求,从而在用户不知情下执行非授权操作。其核心原理在于浏览器会自动携带Cookie等凭证,而服务器无法区分请求是否源自用户的真实意愿。在工程实践中,除了在应用层实现CSRF Token等根本性防护外,在流量入口处构建外围防线同样具有重要价值。Nginx作为广泛使用的反向代理服务器,能够基于HTTP请求的头部特征(如Referer、Origin、X-Requested-With)对请求来源进行校验

weixin_42533120的博客 248

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

实战攻防演之阻击CSRF威胁

1、网络安全理论知识(2天)①了解行业相关背景,前景,确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。(非常重要)2、渗透测试基础(一周)①渗透测试的流程、分类、标准②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等3、操作系统基础(一周)

小王的储物间 442

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 如何像黑客一样思考?荷兰ABN AMRO银行来支招
下一篇: 澳大利亚人口普查遭DDoS攻击,IBM失职受批
SAKAISON
博客等级 码龄10年 61粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值