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

跨站点请求伪造防范(转载)

阅读更多

 

CSRF 的防范机制有很多种,防范的方法也根据 CSRF 攻击方式的不断升级而不断演化。常用的有检查 Refer 头部信息,使用一次性令牌,使用验证图片等手段。出于性能的考虑,如果每个请求都加入令牌验证将极大的增加服务器的负担,具体采用那种方法更合理,需要谨慎审视每种保护的优缺点。

1. 检查 HTTP 头部 Refer 信息,这是防止 CSRF 的最简单容易实现的一种手段。根据 RFC 对于 HTTP 协议里面 Refer 的定义,Refer 信息跟随出现在每个 Http 请求头部。Server 端在收到请求之后,可以去检查这个头信息,只接受来自本域的请求而忽略外部域的请求,这样就可以避免了很多风险。当然这种检查方式由于过于简单也有它自身的弱点:

a) 首先是检查 Refer 信息并不能防范来自本域的攻击。在企业业务网站上,经常会有同域的论坛,邮件等形式的 Web 应用程序存在,来自这些地方的 CSRF 攻击所携带的就是本域的 Refer 域信息,因此不能被这种防御手段所阻止。

b) 同样,某些直接发送 HTTP 请求的方式(指非浏览器,比如用后台代码等方法)可以伪造一些 Refer 信息,虽然直接进行头信息伪造的方式属于直接发送请求,很难跟随发送 cookie,但由于目前客户端手段层出不穷,flash,javascript 等大规模使用,从客户端进行 refer 的伪造,尤其是在客户端浏览器安装了越来越多的插件的情况下已经成为可能了。

2. 使用一次性令牌,这是当前 Web 应用程序的设计人员广泛使用的一种方式,方法是对于 Get 请求,在 URL 里面加入一个令牌,对于 Post 请求,在隐藏域中加入一个令牌。这个令牌由 server 端生成,由编程人员控制在客户端发送请求的时候使请求携带本令牌然后在 Server 端进行验证。但在令牌的设计上目前存在着几个错误的方案:

a) 使用和 Session 独立的令牌生成方式。这种令牌的值和 Session 无关,因此容易被其他用户伪造。这里的其他用户指的是当前 Web 应用程序的其他用户和活跃在网络传输阶段各个设置上的监听者,这种恶意用户可能使用自己的令牌来进行替换以便达到伪造的目的。

b) 完全使用 Session 认证信息作为令牌的生成方式。这种保护方式对于保护 CSRF 是起了作用的,但是可能会造成其他危害,具体来说,如果某些 URL 或者网页被拷贝下来与其他人共享,那么这些 URL 或者拷贝下来的网页中可能会含有用户的会话信息,这种信息一旦被恶意用户获得,就能造成极大的危害。

因此,一个正确的令牌设计应该是使用 Session 信息做 Hash,用得出的哈希值来做 CSRF 的令牌。

3. 使用验证图片,这种方法的出现的作用是对于机器人暴力攻击的防止。但在 CSRF 的防范上,也有一些安全性要求比较高的的应用程序结合验证图片和一次性令牌来做双重保护。由于这种图片验证信息很难被恶意程序在客户端识别,因此能够提高更强的保护。当客户端的浏览器可能已经处于一种不安全的环境中的情况下(比如客户端的安全级别设置较低,客户端浏览器安装了不安全的插件等)。

以上给的这些只是防范 CSRF 的比较通用的一些方法,Web 开发人员可以根据自己对自己的应用程序的功能的理解来确定安全级别的要求从而选择使用不同的保护措施,也推荐在同一应用程序内部结合使用多种方法来进行保护。

 

参考:http://www.ibm.com/developerworks/cn/rational/r-cn-webcsrf/#5.CSRF 的防范

分享到:
评论

相关推荐

    Ajax与跨站点请求伪造漏洞

    Ajax与跨站点请求伪造漏洞,近日,我们的网站请微软的工程师作了一次漏洞扫描,扫描结果中有两个“跨站点请求伪造漏洞”。通过查资料,我做了一番研究,包括此漏洞的入侵条件,被攻击后的损失以及防范措施等。

    Django中如何防范CSRF跨站点请求伪造攻击的实现

    CSRF跨站点请求伪造(Cross—Site Request Forgery)。 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,...

    网络安全原理与应用:跨站请求伪造CSRF简介.pptx

    跨站请求伪造CSRF简介 第7章 Web应用安全 目标 Objectives 要求 了解跨站请求伪造CSRF的基本概念; 了解跨站请求伪造CSRF的攻击原理; 跨站请求伪造CSRF简介 一、跨站请求伪造CSRF简介 跨站请求伪造(Cross-site ...

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

    我们再来重温下CSRF的定义:CSRF英文全称是:Cross Site Request Forgery,中文是:跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击...

    django中CSRF的问题及解决

    CSRF是Cross Site Request Forgery的缩写,称其为“跨站请求伪造”。常与XSS想提并论,但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的...

    buji-pac4j.rar

    buji-pac4j demo机源码 buji-pac4j是基于java8、shiro、pac4j 2.x安全引擎的提供了认证、授权和跨站点伪造请求防范的功能强大的安全库

    互动百科HDwiki 6.0 UTF8.zip

    3.新增CSRF(Cross-site request forgery跨站请求伪造)防范; 3.1防范利用用户标识危害网站; 3.2防范欺骗用户的浏览器发送HTTP请求给目标站点; 3.3防范通过IMG标签触发GET请求并利用利用它来实现CSRF攻击。4....

    Web应用安全风险防护分析与防护研究 (2012年)

    同时分析了 Web应用安全特性,给出了十大安全风险的描述并针对每一个安全风险给出了切实有效的防范措施与解决方案,包括注入式攻击、跨站点脚本攻击、错误的认证和会话管理、不安全的直接对象引用、跨站点伪造请求、不...

    PHP开发中csrf攻击的简单演示和防范

    csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思。网上有很多关于csrf的介绍,比如一位前辈的文章CSRF的攻击方式详解,参考这篇文章简单解释下:csrf 攻击能够实现依赖于...

    互动百科HDwiki 6.0 GBK

    3.新增CSRF(Cross-site request forgery跨站请求伪造)防范; 3.1防范利用用户标识危害网站; 3.2防范欺骗用户的浏览器发送HTTP请求给目标站点; 3.3防范通过IMG标签触发GET请求并利用利用它来实现CSRF攻击。4....

Global site tag (gtag.js) - Google Analytics