• CSRF 攻击原理和防御方法


    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

  • 相关阅读:
    转char varchar nvarchar区别
    NHibernate和Spring.Net框架介绍(一)
    ASP.NET面试题(一)
    存储过程编写经验和优化措施
    软件工程师不可不知的10个概念
    优化数据库前问自己的10个问题
    ZOJ 1610 Count the Colors (线段树)
    POJ 3667 Hotel (线段树)
    HDU Best Reward (扩展KMP)
    POJ 3277 City Horizon (线段树)
  • 原文地址:https://www.cnblogs.com/digdeep/p/4703298.html
Copyright © 2020-2023  润新知