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