问题场景:
我正在使用Laravel 4创建博客。负责创建新博客帖子的表单由CSRF保护(Laravel Docs: CSRF Protection)的内部版本保护。
到目前为止,一切工作正常,但是laravel似乎并未在每个请求上刷新csrf token 。
发生的问题是,如果用户单击浏览器的后退按钮以返回到提交的表单,则输入的数据将保持不变,并且用户能够“重新提交”该表单。这可能会为垃圾邮件发送者敞开大门。
通常,这是由CSRF token 阻止的,因为它会在每次请求时都进行刷新,但是Laravel似乎并不是这样做的。
我使用laravel“资源 Controller ”方法(Laravel Docs: Resource Controllers)处理表单和博客文章 View 。此外,在将提交的输入存储在数据库(MySQL)中之前,我使用Laravels输入验证器。
因此,出现了以下想法:
就我个人而言,我更喜欢第一个想法,但是不幸的是,我没有找到一种方法来强制laravel表现我想要的样子,而无需修改“Illuminate”本身(我想保持“原样”以便能够更新)不带“hasslehoff”的laravel ^^)。
您会推荐什么?
您如何亲自处理问题?
最佳答案
实际上,对于多个帖子提交,我也遇到了这个问题。您在这里有两个选择:
1)在提交后生成一个新的 token :Session::put('_token', sha1(microtime()))
2)将发布后的邮件重定向到确认页面:Redirect::route('form/success')->with("data", $myData)
我结束了第二次。
编辑:在通过杰森的评论中,最好使用上面概述的两种方法的组合