CSRF 预防机制的浏览器后退按钮问题

Browsers Back button Issues with CSRF Prevention Mechanisam

我尝试使用 OWASAP 机制来保护我的遗留应用程序表单 CSRF,但我遇到了导航和后退按钮的问题。然后我尝试使用 struts-1 令牌机制但遇到了同样的问题。我认为令牌注入机制的问题是最初我们将在 jsp 中生成一个令牌并将其存储在会话中并执行一些操作。

考虑 A.jsp。让我们在 jsp 中取令牌值 1,我们将在会话中存储相同的值。 现在我们将在 filter/Action class 中验证它。 之后,我们将在 B.jsp 中执行一些其他操作,我们将在 jsp 中获得令牌新值 2,在 session.After 验证表单服务器中,我们将在会话中获得值 2。 现在,如果我们使用浏览器后退按钮导航并移动到第 1 页并提交它,它将从缓存中加载值并且 A.jsp 将具有值 1 作为令牌, 此时提交 A.jsp 后会显示 CSRF 错误,因为它与会话中的值相矛盾。

有没有办法在不实际干扰应用程序的情况下实现 CSRF 预防机制?

所以,如果我正确理解你的问题,按下后退按钮你会从缓存中获取带有旧令牌的页面?如果我是对的,那么有一个简单的方法可以解决这个问题 - 不要缓存您的页面,并始终从服务器加载它们。

可以通过设置以下响应头来实现

Cache-Control: max-age=0, no-cache, must-revalidate

其他更困难的方法是实现单页应用程序,在这种情况下,您将始终在浏览器内存中拥有实际令牌。