【发布时间】:2015-06-13 10:13:28
【问题描述】:
我使用刀片进行了编辑以编辑资源,如下所示:
{{Form::model( $post ,['action'=> ['PostController@update', 'id' => $post->id], 'method' => 'post'])}}
生成带有动作的表单
http://example.com/posts/edit/123
还有我的字段,有文本和隐藏输入
看到这个网址,不怀好意的用户很容易更新其他帖子。
如果 id 被检查器操纵,我如何保护路由以使其失败?是否有任何内置的 wat 来标记 id 以确保它匹配?这也可以应用于所有隐藏的输入吗?
谢谢
编辑:
我的隐藏字段用法示例: 我的帖子一般都是问答,当用户尝试添加问题的答案时,我将 question_id 设置为隐藏字段,并且我想检查它是否被操纵。
【问题讨论】:
-
您应该通过身份验证和授权来保护您的数据,而不是试图保护您的 URL。与其依赖用户不知道正确的 URL,不如检查登录名和(如果需要)用户权限
-
我已经这样做了 $this->abortIfLoggedUserCantEdit( $post->user->id );我只想要一个更通用的功能。
-
好吧,你不能总是为自己辩护,但是你可以这样做:在请求
edit方法时设置一个等于模型 ID 的 Session 变量,然后拉提交表单时会话中的该变量,find()具有该 ID 的模型并更新它。这样,您甚至不需要将 ID 保留在 URL 或隐藏字段中。听起来像是一个很好的中间件练习!
标签: php forms security laravel laravel-4