Laravel保护形式隐藏的字段和网址

时间:2015-04-08 12:40:22

标签: php forms security laravel laravel-4

我使用刀片进行编辑以编辑资源,如下所示:

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

生成带有操作的表单

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

我的领域,有文字和隐藏的输入

看到此网址,恶意用户更新其他帖子非常容易。

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

由于

编辑:

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

2 个答案:

答案 0 :(得分:10)

Limonte的答案是正确的,以确保编辑其他人的帖子的能力 - 你应该总是那样做。要回答你问题的后半部分:

  

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

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

帮助最大限度地降低风险的一个选项是您可以使用encryption service by Laravel执行此操作:

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

然后在您的控制器中

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

确保您在app.php配置文件中设置了随机应用加密密钥

答案 1 :(得分:3)

要保护路线,您应该检查PostController@update中的权限。

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

public function update($postId)
{
    $post = Post::findOrFail($postId);

    if ($post->user_id !== Auth::id()) {
        abort(403, 'Unauthorized action.');
    }

    // validate, update record, etc.
}