我有一个 struts2 webapp,我需要在其中实现 CSRF 保护。对于统计表格,它非常简单。我只需要激活tokenSession
拦截器然后<s:token/>
在要提交的表单中设置。(解释here和here)
但是,当我需要为不一定通过表单提交的 POST AJAX 调用(我使用的是 jQuery)启用 CSRF 保护时,就会出现问题。在进行后续 AJAX 调用时,我面临重用令牌的问题。
任何指针或不同的方法都值得赞赏。
目前,我已经通过为 AJAX 请求生成令牌并使用正常响应发送它来解决问题,如下所示 -
Map<String, String> tokenInfo = Maps.newHashMap();
tokenInfo.put("struts.token.name", TokenHelper.getTokenName());
tokenInfo.put(TokenHelper.getTokenName(), TokenHelper.setToken());
我将从这个中抽象出一个 util 方法,并让被令牌激活的操作返回这个作为响应的一部分,这些操作将在不刷新页面的情况下重复执行。
不过,我仍在寻找一个优雅的解决方案。
您不能生成一个 Token 并将其用作 ajax 调用中的参数吗?
对于后续的 AJAX 调用,您可以使用per-user Token
,
不一定是per-request Token
,
正如这个 SO 答案中所解释的:我需要一个用于 jQuery .ajax() 的 CSRF 令牌吗?