我目前有一个问题,即actionform的validate方法发生在action的execute方法之前。
这是一个问题的原因是用户可以提交自己的请求,如果他们已完成所有必填字段的验证通过并使用isTokenValid(请求)方法,我可以看到请求无效。并将它们转发到“拒绝访问”页面。但是,如果它们未在伪造请求中完成所有必填字段,则validate方法将返回错误,并将它们转发到实际页面(.jsp),并显示错误消息。
知道如何防止这种情况吗?
答案 0 :(得分:0)
要使用令牌在Struts1中实现CSRF预防,您不应该允许直接访问JSP页面。
用户应该通过Struts Actions访问您的表单,并且该操作将在将它们转发到JSP页面中的表单之前调用saveToken(request)。
通常直接转发到JSP的位置,您可以更改为转发到从ActionForward继承的操作。在执行中,它可以通过调用父ActionForward执行方法来转发。您还可以在新的操作类中实现其他逻辑限制。
对单独线程上的Struts CSRF问题的回答也可能有用: https://stackoverflow.com/a/5339391/6136697