【发布时间】:2014-03-02 21:04:28
【问题描述】:
...我应该尝试这个吗?
我正在使用 Symfony 2(刚刚从 2.3 升级到 2.5),根据我的经验,该框架倾向于为每个表单生成一个 CSRF 令牌。如果您每页有一个表单,这很好,但通常您希望在一个页面上有多个隐藏的表单,在某种用户交互后显示一个表单。
在 Java 中,使用 Spring 框架,CSRF 标记似乎与会话相关联(并作为请求的属性提供)。
我的两个用例是: (1) 使用 JavaScript 驱动的模板(例如 Handlebars)在同一页面上支持多个表单(相同类型)和 (2) 具有多个表单 (不同类型的)在同一页面上也由 JavaScript 模板驱动。
我的问题有三个:
- 有什么方法可以在每个会话而不是按照表单意图实现
CSRF-token?反对这一点的论据是什么? - 这可以“开箱即用”实现,还是需要编写一个忽略表单的
intention的自定义提供程序? - 将表单类型序列化为
JSON并在每个表单中维护CSRF令牌的不同实例会更好吗?
顺便说一句,OWASP 就这个主题提出了general recommnedation:
"一般来说,开发者只需要为当前会话生成一次此令牌。在初始生成此令牌后,该值将存储在会话中,并用于每个后续请求,直到会话过期。当一个请求由最终用户发出,服务器端组件必须与会话中找到的令牌相比,验证请求中令牌的存在和有效性..."
【问题讨论】:
标签: php forms security symfony csrf