csrf,csrf攻击原理与解决方法

http://www.itjxue.com  2023-01-21 00:39  来源:未知  点击次数: 

CSRF(跨站请求伪造)

2021-11-24

跨站点请求伪造(Cross—Site Request Forgery),伪装来自受信任用户的请求来利用受信任的网站。简单来说CSRF就是获取凭证伪造身份去做事。

详细点说:假如A网站中存在CSRF漏洞,攻击者构造一个利用的POC,发送给受害者(在浏览器中处于登陆状态),让受害者点击POC,导致受害者在A网站上的的资料被修改或者钱财被转移。

所有用户进行操作的位置都可能存在CSRF,修改信息、密码、头像。

1.利用浏览器中缓存的cookie

2.没有一次型的token验证

1.修改受害者的一些资料、转账或者改密码

2.如果获取到应用程序中的管理员cookie,攻击者完全可以控制应用的所有数据和功能

1.资源包含

资源包含是在大多数介绍CSRF概念的演示或基础课程中可能看到的类型。这种类型归结为控制HTML标签(例如image、audio、video、object、script等)所包含的资源的攻击者。如果攻击者能够影响URL被加载的话,包含远程资源的任何标签都可以完成攻击。

2.基于表单

通常在正确使用安全的请求方式时看到。攻击者创建一个想要受害者提交的表单; 其包含一个JavaScript片段,强制受害者的浏览器提交。

3.XMLHttpRequest

基于XHR的CSRF通常由于SOP而以XSS有效载荷的形式出现。没有跨域资源共享策略 (Cross-Origin Resource Sharing, CORS),XHR仅限于攻击者托管自己的有效载荷的原始请求。

通过CSRF-token或者验证码来检测用户提交

验证?Referer/Content-Type

对于用户修改删除等操作最好都使用POST操作

避免全站通用的Cookie,严格设置Cookie的域

1.跨账户使用令牌

2.替换相同的长度

3.从请求中删除csrf token

4.解码CSRF token

5.通过HTML提取CSRF token

6.只使用token的静态部分

参考链接:

csrf是什么意思

CSRF是的意思是:CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等。造成的问题包括:个人隐私泄露以及财产安全。

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)。而现在,互联网上许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1、登录受信任网站A,并在本地生成Cookie。

2、在不登出A的情况下,访问危险网站B。

CSRF 攻击是什么

说明: 本文大部分借鉴 wiki-跨站请求伪造 , 另一部分来自文章 wiki-Cross-Site Request Forgery

csrf 全称 Cross-site request forgery, 通常缩写为CSRF 或者 XSRF, 中文名跨站请求伪造. 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 . CSRF 攻击手段是通过发起改变状态的请求, 而不是窃取用户的数据, 因为攻击者无法得到服务器返回的响应

攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞: 简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。 补充: 还可能更改账号所绑定的邮箱地址或者密码等.

假如 Alice 在 bank.com 向 Bob 汇款 10000, 那么攻击将会由以下两步骤组成:

如果 bank.com 把查询参数放到 URL 中, 那么 Alice 向 Bob 转账的操作可以简化为如下:

GET ;amount=100 HTTP/1.1

Maria 根据 bank.com 网站请求的结构, 将 Bob 名字替换为她自己的, 还把金额变大:

;amount=100000

那么这个充满恶意的 URL ,被 Maria 放到 a 标签中, 并且利用欺骗语言吸引 Alice 点击:

a href=";amount=100000"View my Pictures!/a

或者放到一个 长度和宽度都为0 的图片的src 中(图片不用用户点击, 自己就发起请求):

img src=";amount=100000" width="0" height="0" border="0"

如果这张图片放到邮件中, Alice 根本就不会发现什么. 然而浏览器还是会将请求提交到 bank.com 的后台中.

一个真实的事件是发生在2008 年的 uTorrent exploit

假设 bank.com 现在使用 post 请求来传递参数的, 那么这个请求可以简化为:

这种情况下, a 标签和 img 标签都无法发送 post 请求, 但是可以使用 FORM 来完成:

我们还可以利用 JavaScript 来让文档载入的时候就发送这个请求:

假设现在银行使用的是 PUT 将数据放到一个JSON 中发送到后台中:

那么我们可以利用内嵌的 JavaScript :

幸运的是这段 PUT 请求并不会发送, 因为 同源策略 的限制. 除非你的后台设置了

不论是 GET 请求还是 POST 请求, 如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失10000资金。

这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着 如果服务器端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。

什么是CSRF攻击,如何预防

CSRF攻击,全称为“Cross-site request forgery”,中文名为跨站请求伪造,也被称为“One Click

Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS相比,CSRF更具危险性。

CSRF攻击的危害:

主要的危害来自于攻击者盗用用户身份,发送恶意请求。比如:模拟用户发送邮件,发消息,以及支付、转账等。

如何防御CSRF攻击:

1、重要数据交互采用POST进行接收,当然POST也不是万能的,伪造一个form表单即可破解。

2、使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。

3、出于用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为一种辅助手段,不能作为主要解决方案。

4、验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。

5、为每个表单添加令牌token并验证。

浅谈CSRF机制

最近看了一篇关于csrf机制的文章,觉得很有收获,所以自己总结了一下与大家分享

首先我们要理解一个概念,要从三个方面入手,即是什么?为什么?怎么做?

一、CSRF是什么?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。(出自百度百科)

二、CSRF机制是什么?

CSRF验证机制是为了预防CSRF攻击而创立的,它的具体验证方法是:从cookie中获取一个csrf_token的值,再从请求体中获取一个csrf_token的值,二者进行比较,如果两个值相同则验证通过。如果两个值不同,则验证失败,拒绝请求。

三、为什么要用CSRF机制?

? ? ? ?首先我们通过一个案例来了解CSRF的危害:如下图所示,假设用户通过浏览器访问一个银行网站时,浏览器会将cookie中的用户信息发给银行网站,然后用户在银行网站上进行转账操作,网站就接收到用户的POST请求和请求体中的信息,包括转账人和转账金额等。

?? ??? ?这是正常的请求流程,但有些黑客网站会伪造成银行网站(使用相似的域名或IP地址)当用户误点进黑客网站后,黑客网站就会获取到用户的cookie信息,这样他就可以伪造一个转账POST请求发给真正的银行网站,而银行并不知道这个请求是伪造的,就会造成危害和损失。

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? 图1:未开启csrf防护机制的情况

?? ?? ? 上面是没有使用csrf防护机制的情况,如果使用了csrf机制,我们在cookie中和请求体中都加入了csrf-token变量,在上述案例中,当用户误点进黑客网站后,黑客虽然能得到用户的cookie,但他在伪造请求时就无法获取到请求体中的csrf-token值。

?? ??? ?这里有同学会问了,既然我都获取到用户的cookie了,那我直接从cookie中读取csrf-token的值不就行了吗?这里就用到了浏览器的一个机制了,也是csrf防护机制的核心机制,就是同源策略,同源策略就是浏览器限制了不同源(IP)的网站不能相互操作资源。

?? ?? ? 所以,由于同源策略的限制,黑客网站根本无法获取到csrf-token的值,但他不死心啊,他还是伪造了请求发给银行网站,企图瞎猫碰死耗子,但csrf-token的值都是加密过的,蒙对的概率无异于中彩票,结果可想而知,银行网站收到请求后通过比对用户cookie和请求体的csrf-token的值就会发现这是伪造的请求,所以果断拒绝。

?? ?? ? 这样通过csrf防护机制,就可以避免悲剧的发生,为人类文明的和谐发展贡献一份绵薄之力,实乃幸也!

?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? 图2:开启csrf防护机制

总结:总体来说,csrf防护机制是很有必要的,它可以大大的提高网站的安全性,所以我们在建站时要注意使用这个机制,不积小流,无以成江河,不积跬步,无以至千里。希望今天我的讲解能够让大家有所收获~

最后打一波广告,本人是python全栈工程师,如果各位大佬有什么兼职项目或者工作机会都可以找我哈,感激不尽~

我的QQ:1480456073

(责任编辑:IT教学网)

更多

推荐数据库文章