我刚刚在我的应用程序中设置了一个简单的CSRF保护.它创建一个独特的碎屑,它在提交表单时对会话值进行验证.
不幸的是,现在这意味着,当CSRF碎屑相互碰撞时,我的应用程序不能同时打开多个实例(浏览器中的选项卡).
我应该为每个实际的表单创建一个单独的令牌,或者为我所有的表单使用相互共享的面包屑?
这里有什么常识?
你也可以做这取决于你想要的安全级别.
原文链接:https://www.f2er.com/php/131929.htmlOWASP企业安全API(ESAPI)使用每个用户会话方法的单个令牌.这可能是一个非常有效的方法,假设你没有XSS漏洞,你的会话超时时间相当短.如果允许会议活动数天或数周,那么这不是一个好办法.
就个人而言,对于每个表单的每个实例,我都不难发现使用不同的令牌.我在键值对中存储用户会话中的结构.每个项目的关键是表单的ID,该值是包含该令牌的另一个结构以及该令牌的到期日期.通常我只允许令牌生活10-20分钟,然后它过期.对于更长的形式,我可能会给它一个很长的到期时间.
如果您希望能够在同一会话中的多个浏览器标签中支持相同的表单,那么我的方法会变得有点诡计,但仍然可以通过使用唯一的表单ID轻松完成.