Struts 1中的CSRF令牌实现

时间:2016-09-07 21:41:58

标签: java csrf struts-1

我们正在使用同步器令牌来防止CSRF漏洞,如下所示

1> saveToken(request)
2> <input type="hidden"
   name="<%=org.apache.struts.taglib.html.Constants.TOKEN_KEY%>"
   value="<bean:write name="<%=Globals.TRANSACTION_TOKEN_KEY%>"/>">
3> isTokenValid(request) 

由于令牌未刷新,修复程序无法正常工作。可能导致这种情况的原因。

下面的代码还有什么区别

isTokenValid(请求,复位)

1 个答案:

答案 0 :(得分:0)

在显示编辑页面的操作过程中,您可以调用saveToken方法。

saveToken(request)

这会生成新令牌并将其保存在会话中(html:form标记检测到此值并将其存储为html表单上的隐藏值)。您不需要在JSP中创建输入隐藏元素,因为saveToken方法与html:form一起创建它。

在保存数据的操作过程中,您可以调用isTokenValid方法。此方法检查提交的值是否与会话中保存的令牌匹配。

此时如果令牌有效,您有两个选择:

  1. 您可以拨打resetToken,清除会话中的令牌。因此,如果用户再次提交页面,则应清除会话中的令牌,并且对isTokenValid的第二次调用将失败。

  2. 将true作为第二个参数传递给isTokenValid。这将在检查后重置令牌。

    isTokenValid(request,true)
    
  3. 您可以在Struts API中找到更多信息:

    1. isTokenValid(javax.servlet.http.HttpServletRequest request)
    2. saveToken(javax.servlet.http.HttpServletRequest request)
    3. 希望这对你有所帮助。