Struts 1 中的 CSRF 令牌实施

CSRF Token implementation in 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(请求,重置)

在显示您的编辑页面的操作期间,您调用了 saveToken 方法。

saveToken(request)

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

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

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

  1. 您可以调用 resetToken,它会清除会话上的令牌。因此,如果用户再次提交页面,会话上的令牌应该被清除,第二次调用 isTokenValid 将失败。

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

    isTokenValid(request,true)
    

您可以在 Struts API 中找到更多信息:

  1. isTokenValid(javax.servlet.http.HttpServletRequest request)
  2. saveToken(javax.servlet.http.HttpServletRequest request)

希望对您有所帮助。