我想为基于Struts 1.x框架的Web应用程序实施跨站点请求伪造预防。我知道struts 2框架为此提供了令牌拦截器,并且可以使用过滤器实现类似的功能。
我对一些想法感到困惑1)如何以简单的方式生成唯一令牌?(我可以为此目的使用Action类令牌来避免重复提交表单)
将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()方法:
ActionForward
execute()
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { saveToken(request); return super.execute(mapping, form, request, response); }