使用struts token防止跨站请求伪造

发布于 2024-10-04 13:19:50 字数 215 浏览 2 评论 0原文

我想为我的基于 struts 1.x 框架的 Web 应用程序实现跨站点请求伪造预防。 我知道 struts 2 框架为此提供了令牌拦截器,我可以使用过滤器实现类似的功能。

我对一些想法有点困惑 1)如何以简单的方式生成唯一的令牌? (我可以为此目的使用 Action 类令牌,用于避免重复的表单提交)

使用 struts 1.x 框架令牌机制进行 CSRF 预防是否存在任何问题

I want to implement Cross-site request forgery prevention for my web application which is base on struts 1.x framework.
I know that struts 2 framework provide token interceptor for this and I can implement similar functionality using filters.

I am bit confuse about few thinks
1 ) how I can generate unique token with straightforward way ? (can I use Action class token for this purpose which is use for avoiding duplicate form submission)

Are there any issue in using struts 1.x framework token mechanism for CSRF Prevention

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拍不死你 2024-10-11 13:19:50

Struts 1 Action 令牌方法的工作方式与 Struts 2 令牌拦截器类似,它将向您的会话添加令牌并在表单提交时检查它,但这是一个更加手动的过程。基本工作流程是:

  1. 用户通过 Struts Action 访问表单(而不是直接访问 JSP)。 Struts Action 将在转发到包含表单的 JSP 之前调用 saveToken(request)
  2. JSP 上的表单必须使用 标记。
  3. 表单提交到的 Action 将首先调用 isTokenValid(request, true),如果返回 false,您应该重定向回第一个 Action,并显示错误消息。这还会重置下一个请求的令牌。

这样做不仅可以防止重复的表单提交,而且任何脚本都必须先点击第一个 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);
}

The Struts 1 Action token methods work like the Struts 2 token interceptor in that it will add a token to your session and check it on form submission, but it is a much more manual process. The basic workflow is:

  1. The user gets to the form through a Struts Action (not directly to the JSP). The Struts Action will call saveToken(request) before forwarding onto the JSP that contains the form.
  2. The form on the JSP must use the <html:form> tag.
  3. Your Action that the form submits to will first call isTokenValid(request, true), and you should redirect back to the first Action with an error message if it returns false. This also resets the token for the next request.

Doing this will not only prevent duplicate form submissions but any script will have to hit the first Struts Action and get a session before it can submit to the second Struts Action to submit the form. Since a site can't set a session for another site, this should prevent CSRF.

If you usually send users directly to your JSP, don't. Instead, create a new class inheriting from ActionForward and set this as it's execute() method:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
    saveToken(request);
    return super.execute(mapping, form, request, response);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文