5

我在我的 struts.xml 和所有表单中添加了一个拦截器,以防止跨站点请求伪造攻击。我想知道我是否应该做其他事情?例如检索令牌并与提交的表单匹配,以防它不会自动完成。

  <interceptors>
            <interceptor-stack name="defaultSecurityStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref  name="tokenSession">
                       <param name="excludeMethods">*</param>    
                </interceptor-ref>                    
            </interceptor-stack>
  </interceptors>

 <default-interceptor-ref name="defaultSecurityStack"/>

所有表格都有

  <s:form ...>
      <s:token/>
      ...
  </s:form>
4

2 回答 2

2

可以肯定的是,它是否按预期工作?,您可以发送带有省略 csrf 隐藏字段的表单请求。为此,您可以使用Tamper Data。它是 Firefox 插件。当您单击提交按钮并向您显示请求内容时,它会捕获 http 请求。你可以改变那里的一切。因此,您可以使用该方法从帖子正文中省略 csrf 输入。最后,您将测试后端是否像魅力一样工作。

此外,如果一切都按预期工作。你也不需要做其他事情。这将保护您的应用程序免受 csrf 攻击。

于 2014-04-08T07:14:15.367 回答
2

首先,我认为您应该将token拦截器作为堆栈中的第一个拦截器。这样,当令牌与您的代码不匹配时,您的代码就不会被执行。

其次,<param name="excludeMethods">*</param>意味着你从来没有使用过这个拦截器。

最后,token拦截器会自动检查表单参数中的令牌与会话中的令牌。如果不匹配,则返回结果invalid.token,您可以通过该结果更改流程,如下所示

<result name="invalid.token" type="redirectAction">
    <param name="actionName">wrongToken.jsp</param>
</result>

以下网址是有趣的阅读:

于 2014-04-08T07:35:04.140 回答