问题场景:
我正在使用 Laravel 4 创建一个博客。负责创建新博客文章的表单由内置 CSRF 保护(Laravel Docs: CSRF Protection)保护。
到目前为止一切正常,但似乎 laravel 并没有在每个请求上刷新 csrf 令牌。
出现的问题是,如果用户点击浏览器的后退按钮返回到提交的表单,输入的数据仍然存在并且用户能够“重新提交”表单。这可能会为垃圾邮件发送者打开大门。
通常这是由 CSRF 令牌阻止的,因为它在每个请求上都会刷新,但 Laravel 似乎并没有那样做。
我使用 laravel“资源控制器”方法(Laravel Docs: Resource Controllers)来处理表单和博客文章视图。此外,在将提交的输入存储到数据库(MySQL)之前,我使用了 Laravel 输入验证器。
于是产生了以下想法:
以某种方式强制 Laravel 4 在每次请求时自动重新生成 csrf
生成另一个令牌并手动将其包含到表单中
在用户会话(php 或数据库)中保存表单提交的时间戳,并在时间基准上限制新表单提交
就我个人而言,我更喜欢第一个想法,但不幸的是,我无法找到一种方法来强制 laravel 表现出我想要的样子,而无需破解“Illuminate”本身(我想保持“原样”以便能够更新laravel 没有“麻烦霍夫” ^^)。
你会推荐什么?
你自己是如何处理这个问题的?