安全传递数据ID - 安全问题[Laravel]

时间:2018-01-22 03:50:38

标签: javascript php jquery laravel laravel-5

我有用户发布的帖子和打开模态的按钮,用户可以编辑帖子。

我目前有一个具有data-id的按钮,并将id传递给模态,然后在模态中我设置了更新ID,并在提交时提交。

这是一个问题,因为如果用户输入了另一个ID 400,而不是那个可能是50的帖子ID。

我怎样才能确保只更新id / pass那个id。

2 个答案:

答案 0 :(得分:0)

你需要hidden input tag作为post-id,服务器端检查如果post的user_id等于登录用户的id,那么只更新帖子。

public function update(Request $request,$id){
    $post=Post::find($id);
    if($post){
        if($post->user_id == auth()->user()->id){
             // update post
        }else{
             // a person can not update post , redirect or show error        
        }
    }else{
        return view('error404');  // post not found,show 404 error page
    }
}

答案 1 :(得分:0)

如果您使用Illuminate\Foundation\Http\FormRequest执行验证,则可以使用authorize方法。

  

表单请求类还包含一个authorize方法。在此之内   方法,您可以检查经过身份验证的用户是否确实拥有   更新给定资源的权限。

让我们说你的路线是...

Route::get('posts/edit/{post}', ['uses' => "PostController@update"]);

然后在PostRequest中添加一个授权方法来验证用户编辑帖子。

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    $post = Post::find($this->route('post'));
    return $post && $this->user()->can('update', $post);
}

如果您想在授权方法失败时自定义响应,则可以覆盖failedAuthorization()函数。

/**
 * Handle a failed authorization attempt.
 *
 * @return void
 *
 * @throws \Illuminate\Auth\Access\AuthorizationException
 */
protected function failedAuthorization()
{
    // Spank user.
    throw new AuthorizationException('This action is unauthorized.');
}