与多个选项卡的 CSRF 令牌冲突
2022-08-30 21:11:11
我在我的应用程序中构建了CSRF保护,只需在每次页面加载时生成一个随机令牌,将其放入会话中,然后将令牌绑定到tag属性,如下所示:<body>
<body data-csrf-token="csrf_GeJf53caJD6Q5WzwAzfy">
然后,在每个表单操作或ajax请求上,我只需从body标签中获取令牌并将其发送即可。
这很好,除了一个巨大的问题。用户正在打开应用程序的多个选项卡,并且我看到令牌冲突。例如,用户加载第一个页面并生成一个令牌,然后他们切换选项卡,加载另一个页面,从而生成一个新令牌。最后,他们切换回第一页并提交格式操作。这会导致 CSRF 令牌错误无效。
重新构建它的最佳方法是什么,以防止与多个选项卡发生冲突,同时尽可能保持其安全性。
是否只是在登录时生成单个令牌是正确的解决方案,而不是在每次页面加载时生成新令牌?