php - 拉维尔 4 : Prevent multiple form submissions - CSRF Token

标签 php forms csrf laravel-4 post-redirect-get

问题场景:

我正在使用 Laravel 4 创建博客。负责创建新博客文章的表单受到内置 CSRF 保护 ( Laravel Docs: CSRF Protection) 的保护。

到目前为止一切正常,但 laravel 似乎不会在每次请求时刷新 csrf token 。

出现的问题是,如果用户点击浏览器的后退按钮返回到已提交的表单,输入的数据会保留并且用户能够“重新提交”表单。这可能会为垃圾邮件发送者打开大门。

通常这会被 CSRF token 阻止,因为它会在每次请求时刷新,但 Laravel 似乎不会那样做。

我使用 laravel“资源 Controller ”方法 ( Laravel Docs: Resource Controllers ) 来处理表单和博文 View 。此外,在将提交的输入存储到数据库 (MySQL) 之前,我使用了 Laravels 输入验证器。


于是产生了以下想法:

  1. 以某种方式强制 Laravel 4 在每次请求时自动重新生成 csrf

  2. 生成另一个标记并手动将其包含到表单中

  3. 在用户 session (php 或数据库)中保存表单提交的时间戳,并按时间限制新表单提交

就我个人而言,我更喜欢第一个想法,但不幸的是,我无法找到一种方法来强制 Laravel 以我想要的方式表现,而无需破解“Illuminate”本身(我想保持“原样”能够在没有“麻烦hoff”的情况下更新 laravel ^^)。

您会推荐什么?

您自己是如何处理这个问题的?

最佳答案

我实际上也遇到了这个问题以及多个帖子提交。您在这里有两个选择:

1) 提交后生成一个新 token :

Session::put('_token', sha1(microtime()))

2) 发帖后重定向到确认页面:

Redirect::route('form/success')->with("data", $myData)

我最后做了第二个。

编辑:在 Jason 的评论中,最好结合使用上述两种方法

关于php - 拉维尔 4 : Prevent multiple form submissions - CSRF Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239586/

相关文章:

php - __callStatic()、call_user_func_array()、引用资料和 PHP 5.3.1

php - 混合 2 个查询来显示独特的优惠券 PHP/MySql

php - 从特定帖子中获取名称和值

jquery - Django 使用 Fetch 对 POST 请求返回 403 错误

javascript - 预防CSRF?

javascript - 如何检索单选按钮的值并在 codeigniter 中插入数据库?

php - 从mysql表到多维数组

php - Symfony 2 FOSUserBundle : Override form without defining service

internet-explorer - 输入文本/文本区域大小

node.js - express.js CSURF cookie 和 header 匹配,返回 403