• CSRF攻击


    CSRF攻击的全称跨站请求伪造(Cross Site Request Forgery),通过盗用用户的身份信息,以你的名义向第三方网站发起恶意请求,若转账、盗取账号、发信息、邮件。流程框图如下:

    所以CSRF攻击一般场景是:

    1、用户登录受信站点A,生成本地cookie;
    2、用户没有退出站点A,访问了恶意站点B。

    CSRF攻击举例:

    恶意转账

    Get请求
    www.boc.com/transfer.do?accountNum=6233XXXX4324&money=10000
    
    参数说明
    accountNum转账目标账号
    money转账金额
    

    如果银行系统利用上述接口转账,就用可能会被恶意网站攻击。当然上面仅是举例,银行安全等级不至于这么低,使用GET转账。比如银行升级接口为POST提交,当然这也不能解决根本的安全问题,黑客照样能够利用XSS漏洞植入恶意代码,请求转账接口。

    真实银行交易系统付款会有USB key、验证码、登陆密码、支付密码等一系列屏障,支付流程要复杂得多,安全系数也高很多。

    CSRF攻击防御:

    1、将cookie设置为HttpOnly

    CSRF攻击很大程度是利用了浏览器的cookie,为了防止站内XSS漏洞,cookie设置HttpOnly属性,JS脚本就无法读取到cookie中的信息,避免攻击者伪造cookie的情况出现。

    2、增加token

    CSRF攻击之所以成功,主要是攻击中伪造了用户请求,而用户请求的验证信息都在cookie中,攻击者就可以利用cookie伪造请求通过安全验证。因此抵御CSRF攻击的关键就是,在请求中放入攻击者不能伪造的信息,并且信息不在cookie中。

    鉴于此,开发人员可以在http请求中以参数的形式加一个token,此token在服务端生成,也在服务端校验,服务端的每次会话都可以用同一个token。如果验证token不一致,则认为至CSRF攻击,拒绝请求。

    表单中增加一个隐藏域:

    <input type="hidden" name="_token" value="tokenvalue"/>
    

    在服务端session中添加token:

    HttpSession session = request.getSession();
    Object token = session.getAttribute("_token");
    if(token == null || "".equals(_token){
        session.setAttribute("_token",UUID.randomUUID().toString());
    }

    3、通过Referer识别

    Http头中有一个字段Referer,它记录了Http请求来源地址。但是注意不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变。

    (火狐的一个插件RefControl修改Referer引用)

  • 相关阅读:
    golang框架对比Revel and Beego
    Gin框架系列02:路由与参数
    用cp命令拷贝文件,源目录后带不带斜杠的区别
    Isilon Gen6的换盘步骤
    如何在同一行里执行多个linux命令?
    KB,MB,GB,TB,PB,EB,ZB,YB,BB
    Isilon的WebUI上指定跨时区时间的小问题
    用Powershell强制同步Windows主机与Internet time server的时间
    Remote Desktop突然不能用了 “This could be due to CredSSP encryption oracle remediation”
    打开KVM Console的一些注意事项
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12142240.html
Copyright © 2020-2023  润新知