2

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

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

任何指针或不同的方法都值得赞赏。

4

2 回答 2

2

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

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

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

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

于 2012-11-13T18:47:42.000 回答
0

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

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

不一定是per-request Token,

正如这个 SO 答案中所解释的:我需要一个用于 jQuery .ajax() 的 CSRF 令牌吗?

于 2012-11-13T09:43:40.980 回答