digdeep

凡是过去,皆是序幕。Read the fucking manual and source code.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1. CSRF攻击原理

CSRF(Cross site request forgery),即跨站请求伪造。我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。

一般而且存在XSS漏洞的网站,也极有可能存在CSRF漏洞。因为CSRF攻击中的那个“伪造的请求”的URL地址,一般是通过XSS攻击来注入到服务器中的。所以其实CSRF是以XSS为基础的,也可以看做是XSS攻击的一种。

CSRF一般的攻击过程是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url),当(登录)用户访问某特定网页时,如果用户点击了该URL,那么攻击就触发了,我们可以在该恶意的url对应的网页中,利用 <img src="" /> 来向目标网站发生一个get请求,该请求会携带cookie信息,所以也就借用了用户的身份,也就是伪造了一个请求,该请求可以是目标网站中的用户有权限访问的任意请求。也可以使用javascript构造一个提交表单的post请求。比如构造一个转账的post请求。

所以CSRF的攻击分为了两步,首先要注入恶意URL地址,然后在该地址中写入攻击代码,利用<img> 等标签或者使用Javascript脚本。

2. CSRF防御

2.1 referer

因为伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断 referer 头,如果不是来自本网站的请求,就判定为CSRF攻击。但是该方法只能防御跨站的csrf攻击,不能防御同站的csrf攻击(虽然同站的csrf更难)。

2.2 使用验证码

每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。

2.3 使用token

每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。

将敏感操作又get改为post,然后在表单中使用token. 尽量使用post也有利于防御CSRF攻击。

3. 有价值的参考

http://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

http://drops.wooyun.org/papers/155

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

https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project

http://www.hanguofeng.com/archives/security/preventing-csrf

4. 使用 OWASP CSRFGuard 防御 CSRF

https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project

https://www.owasp.org/index.php/CSRFGuard_3_User_Manual

http://blog.csdn.net/testing_is_believing/article/details/11672553

 

posted on 2015-08-04 22:13  digdeep  阅读(9262)  评论(0编辑  收藏  举报
不懂数据库和Web安全的架构师不是一个好的程序员。