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
方法。此方法检查提交的值是否与会话中保存的令牌匹配。
此时,如果令牌有效,您有两个选择:
您可以调用 resetToken
,它会清除会话上的令牌。因此,如果用户再次提交页面,会话上的令牌应该被清除,第二次调用 isTokenValid
将失败。
将 true 作为第二个参数传递给 isTokenValid
。这将在检查后重置令牌。
isTokenValid(request,true)
您可以在 Struts API 中找到更多信息:
- isTokenValid(javax.servlet.http.HttpServletRequest request)
- saveToken(javax.servlet.http.HttpServletRequest request)
希望对您有所帮助。
我们正在使用同步器令牌来防止如下 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
方法。此方法检查提交的值是否与会话中保存的令牌匹配。
此时,如果令牌有效,您有两个选择:
您可以调用
resetToken
,它会清除会话上的令牌。因此,如果用户再次提交页面,会话上的令牌应该被清除,第二次调用isTokenValid
将失败。将 true 作为第二个参数传递给
isTokenValid
。这将在检查后重置令牌。isTokenValid(request,true)
您可以在 Struts API 中找到更多信息:
- isTokenValid(javax.servlet.http.HttpServletRequest request)
- saveToken(javax.servlet.http.HttpServletRequest request)
希望对您有所帮助。