【问题标题】:Struts 1.2 ActionForms & isTokenValid CSRFStruts 1.2 ActionForms & isTokenValid CSRF
【发布时间】:2013-08-06 15:25:57
【问题描述】:

我目前有一个问题,即 actionform 的 validate 方法发生在 action 的 execute 方法之前。

这是一个问题的原因是用户可以提交他们自己的请求,如果他们所有必填字段都完成了验证通过并使用 isTokenValid(request) 方法,我可以看到该请求无效。并将它们转发到“拒绝访问”页面。但是,如果他们没有完成伪造请求中的所有必填字段,则 validate 方法会返回错误,并将它们转发到实际页面 (.jsp) 并显示错误消息。

知道如何防止这种情况发生吗?

【问题讨论】:

  • 为什么他们可以访问他们根本无法访问的页面?无论如何,有几个选项,但这取决于当前的应用程序流程,例如,您是使用身份验证过滤器、自定义请求处理器、“手动”还是通过默认请求处理器进行验证等。
  • 我正在实施 CSRF 保护。因此,用户会登录,他们会意外地从恶意站点发起请求。大多数请求都可以通过使用 isTokenValid 来阻止,但由于在点击操作之前验证失败,它会转发到 .jsp 而不是拒绝访问页面。请注意,这实际上可能并不危险,因为所有发生的事情都是用户被转发到页面,而不是恶意人员自己,但仍然希望阻止。我是 struts 的新手,但使用带有自定义逻辑的 actionForm 的 validate 方法。

标签: java struts action csrf actionform


【解决方案1】:

要在 Struts1 中使用令牌实现 CSRF 预防,您不应允许直接访问您的 JSP 页面。

用户应该通过 Struts Actions 访问您的表单,并且该操作将在将它们转发到 JSP 页面中的表单之前调用 saveToken(request)。

在通常直接转发到 JSP 的地方,您可以更改为转发到从 ActionForward 继承的操作。在执行过程中,它可以通过调用父 ActionForward 执行方法进行转发。您还可以在新的操作类中实现额外的逻辑限制。

在单独线程上对 Struts CSRF 问题的回答也可能有用: https://stackoverflow.com/a/5339391/6136697

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2011-06-30
    • 2013-08-02
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多