`

CSRF原理

阅读更多

[转]对CSRF(跨站请求伪造)的理解 

下班的时候跟公司大神一起走,问了他几个问题,接着就给我讲了XSS攻击和CSRF攻击,他通过举例子的方式讲解,通俗易懂,感觉收获很大!又学到了一些新知识,心里特别高兴,为了防止我这个脑子很快就忘掉,所以趁着热乎,写下来,方便以后回顾一下~

一、什么是CSRF?

CSRF是Cross Site Request Forgery的缩写,翻译过来就是跨站请求伪造。那么什么是跨站请求伪造呢?让我一个词一个词的解释:

1、跨站:顾名思义,就是从一个网站到另一个网站。

2、请求:即HTTP请求。

3、伪造:在这里可以理解为仿造、伪装。

综合起来的意思就是:从一个网站A中发起一个到网站B的请求,而这个请求是经过了伪装的,伪装操作达到的目的就是让请求看起来像是从网站B中发起的,也就是说,让B网站所在的服务器端误以为该请求是从自己网站发起的,而不是从A网站发起的。当然,请求一般都是恶意的。

看到这里,你可能会问:为什么要伪装成从B网站发起的呢?从网站A直接向B网站服务器发起请求不可以吗?

要回答这个问题,就需要我们对Cookie机制有一定的认识。关于Cookie机制我会单独写一篇文章,这里不做详细介绍。这里你只需要知道:之所以要伪装成从B网站发起的,是因为Cookie是不能跨域发送的。结合上面这个例子来说就是:如果从A网站直接发送请求到B网站服务器的话,是无法将B网站中产生的Cookie一起发给B服务器的。

可能你还会问,为什么非要发送Cookie呢?这是因为服务器在用户登录后会将用户的一些信息放到Cookie中返回给客户端,然后客户端在请求一些需要认证的资源的时候会把Cookie一起发给服务器,服务器通过读取Cookie中的信息来进行用户认证,认证通过后才会做出正确的响应。

A网站访问B网站服务器的一些需要认证的资源的时候,如果没有Cookie信息,服务器是拒绝访问的,那么A网站就无法进行恶意操作。而伪造成B网站的请求,就可以将B网站的Cookie一起发到B服务器,这个时候就服务器就认为该请求是合法的,就会给出正确的响应,这个时候,A网站就达到目的了。

简单一句话就是:攻击者盗用了你的身份,以你的名义发送恶意请求。

那么,A网站通过CSRF能够做那些操作呢?

二、CSRF能够做什么呢?

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

三、通俗点的例子

下面我们举个例子来说明CSRF攻击是如何实现的。

假设有一个微博网站B,B有一个“加关注”的功能,即一个用户可以关注另一个用户,而这个功能是这样的实现的:用户每次点击“加关注”按钮的时候,就会向服务器发送一个GET请求,URL如下:

1
http://www.bdomain.com/addfriends?uid=123

URL中的参数uid表示的是你要关注的用户的ID。

在正常情况下,即你登录B网站后,点击“加关注”按钮,浏览器会将上面的URL连同B网站产生的Cookie一起发送到B网站的服务器,B服务器首先通过Cookie进行用户认证,如果Cookie中的信息正确,就会进行向数据库中写入记录,这样,你就成功关注了ID为123的用户。

假如我是一个恶意用户,我想让更多的人关注我,而我又不想通过正常的渠道去实现,因为毕竟正常渠道比较浪费时间,于是我便开始想歪主意,碰巧,B网站的“加关注”的实现原理被我发现了。这个时候,我便进行了如下操作:

首先我在我自己的网站A里发了篇文章,文章中全是妖娆的美女图片,大家都喜欢美女嘛,所以就会有很多人来看我的这些美女,我们知道,图片在网页中大都是通过<img scr=”http://….”/>这样的形式实现的,图片加载的时候就会请求src中指定的URL,而我就把众多美女图片的src写成了B博客里“加关注”的URL,不同的是将参数uid的值都写成了我在B网站中的ID(假设是456),即:

1
http://www.bdomain.com/addfriends?uid=456

在网站A中的代码中就是:<img src=”http://www.bdomain.com/addfriends?uid=456″ />,当用户点击我发的文章的时候,浏览器就会请求这个src中的URL,这样就达到了在A网站中请求B服务器资源的目的,但是这样还差了一步,因为请求还是从A网站发出的,所以就没有B网站产生的Cookie,所以还是达不到目的,那该怎样做呢?

这就需要利用用户的上网习惯了,我们平时都会同时浏览很多网页,比如,你打开浏览器登录了B网站,与此同时,你可能也打开了我的网站A,而碰巧被我网站里全是美女的帖子吸引住了,就忍不住打开了这个帖子,这个时候,我的网站A就发起了上面的那个到B服务器的请求,而此时,你已经登录了B网站,Cookie已经产生了,浏览器一看请求的域名是bdomain.com,便将存放在客户端的B网站的Cookie给顺带一起发了过去,这样,服务器就会误认为是你主动要关注我的,于是,便向数据库写入了一条记录,而你就在不知不觉中,默默无闻的关注我了~~~

这样,我的目的就达到了~~~~

而如果很多用户都像你一样,在登录B微博的同时查看了我的帖子,那么他们也一样,默默无闻的关注了我~于是,我的粉丝量就大增!~~~

这里要说明一下:上面例子中说的同时打开多个网页只是可以被利用的方法中的一种,但并不是唯一的一种,你要知道,黑客们可不是吃素的啊,他们手段多着呢~在此顺道向黑客们的技术深深的致一敬~!

四、下面借用别人的图文来说明一个整个CSRF的过程:

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

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

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

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了……)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

五、GET还是POST

上面我举得例子中,B网站用的是GET请求,所以就被我轻松的利用了,那么,如果B网站“加关注”的实现方式采用的是POST请求,是不是就能有效防止CSRF攻击了呢?

不是这样的,如果B改用了POST请求,那么通过<img src/>这样的方式的确无法达到目的了,但是攻击者还是可以通过人为构造POST请求的方式达到目的。

那么,在开发过程中,应该如何有效避免CSRF攻击呢?

要回答这个问题,请参考:

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

http://book.2cto.com/201212/12162.html

==================================================

声明:本文的第四部分摘自:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

分享到:
评论

相关推荐

    第22周-第11章节-Python3.5-Django之CSRF原理详解2.avi

    第22周-第11章节-Python3.5-Django之CSRF原理详解2.avi

    第22周-第10章节-Python3.5-Django之CSRF原理详解1.avi

    第22周-第10章节-Python3.5-Django之CSRF原理详解1.avi

    第一节 CSRF原理介绍-01

    CSRF漏洞原理介绍 在Web应用安全中,CSRF(Cross-site request forgery,跨站请求伪造)是一种常见的攻击方式。它通过伪装成受信任用户请求受信任的网站,执行某些非法操作。以下是CSRF漏洞的详细介绍。 CSRF漏洞...

    9、CSRF原理.pdf

    CSRF攻击原理 CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的Web攻击类型,它利用用户对网站的信任,通过欺骗用户浏览器,执行非法操作。以下是CSRF攻击的原理和防御方法: CSRF攻击原理 1. 用户...

    yanm1e#yanm1e.github.io#2020-07-15-csrf原理简介1

    1.登录受信任网站A,并在本地生成Cookie 2.在不登出A的情况下,访问危险网站B 1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站

    csrf绕过Referer技巧-01

    本文将详细介绍CSRF绕过Referer技巧,包括Referer防御CSRF原理、Referer防御代码编写、绕过Referer技巧和Burpsuite自动生成POC。 一、Referer防御CSRF原理 HTTP Referer是header的一部分,当浏览器向Web服务器发送...

    详解Django的CSRF认证实现

    1.csrf原理 csrf要求发送post,put或delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请求时携带上次分配的随机字符串到服务端进行校验 2....

    简解:CSRF的原理及防御

    简解:CSRF的原理及防御

    常考渗透测试面试题.docx

    本文总结了渗透测试面试题中的知识点,涵盖了网络安全、漏洞原理、修复方案、工具使用、渗透测试思路、SQL 注入、XSS、CSRF、SSRF、反序列化漏洞、逻辑漏洞、越权访问、Java 和 PHP 框架安全等方面。 一、网络安全 ...

    CSRF跨站请求伪造CSRF PHP demo代码

    总之,理解CSRF攻击的原理和防范措施是每个Web开发者的必备知识。这个PHP demo提供了一个实践的例子,展示了如何在实际应用中实现CSRF令牌,以及如何在表单设计和处理中考虑安全。通过学习和分析这个demo,我们可以...

    CSRF防护:CSRF基础概念与原理.docx

    CSRF防护:CSRF基础概念与原理.docx

    Tomcat怎样防止跨站请求伪造(CSRF) 1

    Tomcat 防止跨站请求伪造(CSRF)机制浅析 ...在本文中,我们讨论了 CSRF 攻击的原理和防止方法,并介绍了 Tomcat 中的 CSRF Prevention Filter 工具。通过使用该工具,开发者可以保护他们的 Web 应用免受 CSRF 攻击。

    挖掘CSRF之道

    #### 一、CSRF概念与原理 **跨站请求伪造(Cross-Site Request Forgery,简称CSRF)**是一种针对Web应用的攻击方式,其核心思想是利用用户的身份权限执行非用户本意的操作。在CSRF攻击中,攻击者诱使受害者访问特定...

    hucart-含有CSRF漏洞的源码.zip

    在这个案例中,"hucart-含有CSRF漏洞的源码.zip" 提供了一个实际的示例,让我们深入探讨一下CSRF漏洞的原理、危害以及防范措施。 1. **CSRF漏洞原理**: CSRF漏洞通常发生在Web应用程序中,这些应用未对请求进行...

    CSRF知识点·总结.pdf

    攻击者利用社交工程学原理,如通过电子邮件或聊天软件发送带有恶意链接的信息,骗取用户点击这些链接。 CSRF攻击的关键点在于伪造请求能够引起服务器状态的改变,而非窃取数据。例如,攻击者可能利用CSRF迫使用户...

    基于JSP的Java Web项目的CSRF防御示例

    **CSRF攻击原理** CSRF攻击通常发生在用户已登录一个网站并保持会话的情况下,攻击者通过构造恶意链接或表单,诱使用户在不知情的情况下发送伪造的HTTP请求。这些请求通常执行如转账、修改密码等重要操作,因为...

    CSRF demo代码

    通过分析和学习这个代码,你可以深入理解CSRF攻击的工作原理以及如何在实际应用中进行有效的防护。如果你打算使用或分析这个代码,确保在安全的环境中进行,以防止对真实系统造成潜在风险。同时,时刻保持代码库和...

    webcsrf攻击的应对之道

    #### 三、CSRF攻击的原理 CSRF攻击主要依赖于浏览器的自动认证机制。当用户登录某个网站后,该网站会在用户的浏览器中设置Cookie,用于保存用户的登录状态。当用户访问另一个恶意网站时,如果该恶意网站包含了指向...

    CSRF的脚本,可以做测试使用.zip

    下面将详细解释CSRF攻击的工作原理、危害以及如何防范。 1. CSRF攻击简介: CSRF攻击发生时,攻击者诱导受害者在已经登录的目标网站上执行操作,比如修改密码、转账等。由于用户浏览器中保存了目标网站的会话凭证...

    django中CSRF的问题及解决

    尽管两者都涉及跨站攻击,但它们的工作原理和攻击方式却大不相同。 - **XSS**:通过向受害者发送包含恶意脚本的链接或内容,当受害者点击或加载时,这些脚本会在受害者的浏览器上执行,从而盗取用户的敏感数据(如...

Global site tag (gtag.js) - Google Analytics