我尝试使用OWASAP机制来保护我的遗留应用程序表单CSRF,但我遇到了导航和后退按钮的问题。然后我尝试使用struts-1令牌机制,但遇到了同样的问题。我认为使用令牌注入机制的问题最初我们将在jsp中生成一个令牌并将其存储在会话中并执行一些操作。
考虑A.jsp。让我们在jsp中获取标记值1,我们将在会话中存储它。 现在我们将在filter / Action类中验证它。 之后我们将在B.jsp中执行一些其他操作,我们将在jsp和session中使用令牌新值2.在验证表单服务器之后,我们将在会话中具有值2。 现在,如果我们使用浏览器后退按钮并移动到第1页并提交它,它将从缓存加载值,而A.jsp将值1作为标记, 此时提交A.jsp后,它将显示CSRF错误,因为它与会话中的值相矛盾。
有没有办法实现CSRF预防机制而不会实际干扰应用程序?
答案 0 :(得分:0)
因此,如果我正确理解您的问题,按回按钮会从缓存中获取旧令牌的页面?如果我是正确的,那么有一种简单的方法可以解决这个问题 - 不要缓存您的页面,并始终从服务器加载它们。
可以通过设置以下响应标头来实现
Cache-Control: max-age=0, no-cache, must-revalidate
其他更困难的方法是实现单页面应用程序,在这种情况下,您将始终在浏览器内存中拥有实际令牌。