Laravel保护表单隐藏字段和url


Laravel protect form hidden fields and url

我用blade进行了一次编辑来编辑资源,如下所示:

{{Form::model( $post ,['action'=> ['PostController@update', 'id' => $post->id], 'method' => 'post'])}}

生成具有动作的表单

http://example.com/posts/edit/123

我的字段,有文本和隐藏的输入

看到这个url,恶意用户很容易更新其他帖子。

如果id被检查员操纵,我如何保护路由使其失败?是否有任何内置的wat来标记id以确保其匹配?这也可以应用于所有隐藏的输入吗?

感谢

编辑:

我的隐藏字段用法示例:我的帖子通常是问答,当用户试图向问题添加答案时,我将question_id设置为隐藏字段,并希望检查它是否被操纵。

Limonte的答案是正确的,可以确保编辑其他人的帖子,而且你应该一直这样做。回答你问题的后半部分:

我将question_id设置为隐藏字段,并希望检查它是否被操纵。

问题是,您可以从不信任客户端提供给系统的数据。您必须始终假设它已被篡改。

帮助最小化风险的一个选项是,您可以使用Laravel的加密服务来做到这一点:

{{ Form::hidden('question_id', Crypt::encrypt($question_id)) }}

然后在你的控制器

$question_id = Crypt::decrypt(Input::get('question_id'));

只需确保在app.php配置文件中设置了一个随机应用程序加密密钥

为了保护路由,您应该在PostController@update中检查权限。

在方法开始检查用户是否可以编辑给定的帖子:

public function update($postId)
{
    $post = Post::findOrFail($postId);
    if ($post->user_id !== Auth::id()) {
        abort(403, 'Unauthorized action.');
    }
    // validate, update record, etc.
}