使用支柱令牌防止跨站点请求伪造
2022-09-02 04:28:08
我想为我的Web应用程序实现跨站点请求伪造预防,该应用程序基于struts 1.x框架。我知道 struts 2 框架为此提供了令牌拦截器,我可以使用过滤器实现类似的功能。
我对少数想法有点困惑1)我如何以直接的方式生成独特的令牌?(我可以使用操作类令牌来实现此目的,该令牌用于避免重复的表单提交)
使用 struts 1.x 框架令牌机制进行 CSRF 预防是否存在任何问题
我想为我的Web应用程序实现跨站点请求伪造预防,该应用程序基于struts 1.x框架。我知道 struts 2 框架为此提供了令牌拦截器,我可以使用过滤器实现类似的功能。
我对少数想法有点困惑1)我如何以直接的方式生成独特的令牌?(我可以使用操作类令牌来实现此目的,该令牌用于避免重复的表单提交)
使用 struts 1.x 框架令牌机制进行 CSRF 预防是否存在任何问题
Struts 1 Action令牌方法的工作方式与Struts 2令牌拦截器类似,因为它会将令牌添加到您的会话并在表单提交时检查它,但这是一个更加手动的过程。基本工作流程是:
saveToken(request)
<html:form>
isTokenValid(request, true)
false
这样做不仅可以防止重复的表单提交,而且任何脚本都必须点击第一个Struts Action并获得会话,然后才能提交到第二个Struts Action以提交表单。由于一个站点无法为另一个站点设置会话,因此这应该会阻止 CSRF。
如果您通常将用户直接发送到 JSP,请不要这样做。相反,创建一个从中继承的新类,并将其设置为方法:ActionForward
execute()
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}