【问题标题】:HOWTO do CSRF protection in Struts2 application for AJAX requests如何在 Struts2 应用程序中针对 AJAX 请求进行 CSRF 保护
【发布时间】:2012-11-01 11:00:51
【问题描述】:

我有一个 struts2 webapp,我需要在其中实现 CSRF 保护。对于统计表格,它非常简单。我只需要激活tokenSession 拦截器,然后在要提交的表单中设置<s:token/>。 (解释herehere

但是当我需要为不一定通过表单提交的 POST AJAX 调用(我使用的是 jQuery)启用 CSRF 保护时,就会出现问题。在进行后续 AJAX 调用时,我面临重复使用令牌的问题。

感谢任何指针或不同的方法。

【问题讨论】:

    标签: jquery ajax struts2 csrf antiforgerytoken


    【解决方案1】:

    目前我已经通过为 AJAX 请求生成令牌并使用正常响应发送它来解决问题 -

        Map<String, String> tokenInfo = Maps.newHashMap();
        tokenInfo.put("struts.token.name", TokenHelper.getTokenName());
        tokenInfo.put(TokenHelper.getTokenName(), TokenHelper.setToken());
    

    我将从中抽象出一个 util 方法,并让被令牌激活的操作返回此作为响应的一部分,这些操作将在不刷新页面的情况下重复执行。

    不过,我仍在寻找一个优雅的解决方案。

    【讨论】:

    • 我们也面临这个问题。你找到更好的解决方案了吗?另外,你能解释一下你的解决方案吗?您是否也对 JSP 文件进行了任何更改。
    【解决方案2】:

    你不能生成一个 Token 并将其用作 ajax 调用中的参数吗?

    对于后续的AJAX调用,可以使用per-user Token

    不一定是per-request Token

    正如这个 SO 答案中所解释的:Do I need a CSRF token for jQuery .ajax()?

    【讨论】:

    • 谢谢,但我在想所有这些也可以防止重复提交。 “按用户”的方法对此没有太大帮助。
    猜你喜欢
    • 2019-01-25
    • 2012-03-15
    • 2011-01-21
    • 2022-10-17
    • 2020-06-07
    • 2017-09-01
    • 2015-10-06
    • 2010-09-13
    • 2015-10-15
    相关资源
    最近更新 更多