让Owasp的csrfguard 3.1与Struts forwards一起使用

时间:2015-08-10 22:31:18

标签: java jsp struts csrf owasp

我在发布之前搜索了所有owasp csrfguard邮件列表档案的struts,我将搜索“forward”next 我们正在尝试将csrfguard 3.1添加到一个非常大的遗留(意大利面)网络应用程序中(实际上很多,但现在关注1) 我们正在使用struts 1.1,weblogic 12.1.3等 请不要对旧的struts libs进行lambaste,它就是现在公司的...... 我可以通过一组未受保护的URL来获得相当复杂的CRUD流程,以及关闭每页令牌和令牌旋转属性的快乐路径 ,实质上,只是另一个会话令牌,OWASP_CSRFTOKEN,类似于JSESSIONID和struts令牌,可以伪造是类似的事情。我们需要每页令牌或旋转令牌 经过仔细分析(看起来像是什么)最新最好的来源https://github.com/aramrami/OWASP-CSRFGuard 问题在于struts的前进和流程如下:

  1. 使用(wonky javascript)和csrfguard taglib的初始请求 openWin(“createSomeEntityForward.do?`csrftaglib here uri =”createSomeEntityForward.do“/>”,“Create Entity”);
  2. CSRFGuard过滤器(每页使用令牌)验证/允许第一个请求uri createSomeEntityForward
  3. 但当Filter拦截第二个转发路径“/WEB-INF/jsp/.../createEntity.jsp"/>请求中的令牌未在csrfguard uri / token映射中找到,因此它会检查会话令牌失败
  4. 我也尝试关闭每页令牌并打开令牌旋转,会话令牌得到更新,但是orig请求有现在的陈旧令牌
  5. 如果有其他正常(非csrf)验证,例如缺少字段,它将被转发到另一个也会中断的页面
  6. 此时不能重新编写webapp,也不能升级到更现代版的struts

    建议的解决方法:

    1. 我们考虑将附加令牌写入我们自己的过滤器到每个出站请求(并使用csrfguard api),注入(如果GET或主体,如果POST,则将NV对添加到URL)并放弃javascript注入或csrf taglib,因为我们有数百个复杂的页面)。
    2. 当csrfguard过滤器现在接收入站请求时,它会验证每个请求,无论是否转发
    3. 另一种解决方法:

      1. 以某种方式获取orig请求的句柄,.do请求,然后更改CSRFGuard.verifyPageToken()方法以检查转发的URI(.jsp)或orig URI(.do)的URI /令牌映射比赛
      2. 我们也对其他想法持开放态度?

        这是一段struts-config.xml(名字有点捏造)

        <action path="/createSomeEntityForward" input="/WEB-INF/jsp/…/index.jsp"
                scope="request" type="com….…..portal.action.SecurityForwardAction" 
                validate="false"    
            <forward name="failure"  path="/WEB-INF/jsp/…/index.jsp"/>
            <forward name="success"  path="/WEB-INF/jsp/…createEntity.jsp"/>
        </action>
        

        这些是一些相关的会话属性

        org.apache.struts.action.TOKEN=d408fea028c0094dd0c8d8f978b3ed51
        OWASP_CSRFTOKEN=SDOB-M7W9-CSPP-BRHS-Q1L4-05AG-8XDZ-3KNB
        

0 个答案:

没有答案