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

简介:

 

什么是CSRF

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

Get型CSRF:

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

如下例:

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

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

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

POST型CSRF

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

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

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

document.forms[0].submit(); //自动提交

构造好form表单后,那么攻击者将form.html上传至一台服务器上,将该页面 如:/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会话

session_start(); //开启session会话

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

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

我们输出看看

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

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

">

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

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

我们来感受下。

{C}

Ok,接下来我们只需要去判断用户传递过来的token值是否和session里面的值一致(这里使用简单判断,if(isset($_SESSION['226_token']) && isset($_POST['token'])){

if($_SESSION['226_token'] === $_POST['token']){

//这里是验证成功后所写代码

echo '购买成功';

}else{

echo '请勿非法操作!判断是否一致';

}

}else{

echo '请勿非法操作!判断是否存在';

}

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

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

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

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

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


作者:佚名

来源:51CTO

相关文章
|
12月前
|
安全 前端开发 JavaScript
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
1762 5
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
|
网络安全 数据安全/隐私保护
什么是 CSRF 攻击
CSRF(跨站请求伪造)攻击是指攻击者诱导用户点击恶意链接或提交表单,利用用户已登录的身份在目标网站上执行非授权操作,如转账、修改密码等。这种攻击通常通过嵌入恶意代码或链接实现。
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
651 4
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
472 2
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
673 0
|
JavaScript 安全 前端开发
js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
320 0
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
242 0
|
SQL 安全 前端开发
渗透攻击实例-邪恶的CSRF(社会工程学)
渗透攻击实例-邪恶的CSRF(社会工程学)
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
1446 0