Laravel 的安全理念是不够安全、太安全还是刚刚好?

问题描述 投票:0回答:1

我意识到这是一个有点普遍的问题。我想它可以最好地概括为“如果我没有将任何面向用户的属性直接绑定到模型,我是否需要担心这些模型的变化”?

我正在开发的 Laravel / Livewire 项目有不同级别的管理员用户,因此在多个阶段我需要检查用户是否有权执行他们想要执行的操作。

由于我不会详细说明的原因,我使用自定义方法来执行此操作,而不是 Laravel 的门,但我很高兴该过程返回正确的答案(即“是的,他们可以做到这一点”或“不,他们不能这样做”)。

因此,例如,具有正确权限的管理员可以管理另一个用户。使用一个实际示例,他们可以在他们拥有相关权限的事件中管理用户的列表。列表的批量管理通过 Livewire Modal 组件进行处理。

该模式已安装相关卖家和事件:

public $seller;
public $event;

public function mount(User $seller, Event $event) {
    $this->seller = $seller;
    $this->event = $event;
}

在渲染时,将检索登录用户并检查其权限。如果他们具有正确的权限,则会向他们显示相关模式,如果没有,则会向他们显示“您无权执行此操作”模式:

public function render()
{
    $user = Auth::user();
    if(!$user->eventRolesInclude(['owner', 'relevantrights'], $this->event)) {
        return view('main.forbidden');
    }
    return view('livewire.admin.modals.specific.modal');
}

模态本身仅包含一个关闭按钮和一个执行相关操作的按钮。它仅使用

$seller
属性来自定义页面上的措辞(商品数量、卖家名称等)。

当管理员单击操作按钮时,它会调用组件内的函数来执行必要的操作:

public function doSomething()
{
    $admin = Auth::user();
    if(!$admin->eventRolesInclude(['owner', 'relevantrights'], $this->event))  {
        $this->alert('warning', "You do not have the right role to do this");
        return false;
    }
    $listings = $this->seller->getListingsForEvent($this->event);
    // Go on and do stuff

我想我的问题是这样的:

  1. 如果我除了在模式中输出卖家名称之外没有使用 $seller 模型(在本例中),我是否需要担心它会以任何方式更改?在 doSomething() 方法中,我能否确信 $this->seller 不会返回除 mount() 方法中实例化的卖家之外的任何卖家?在任何情况下,了解网站前端开发人员工具的人都可以更改该属性吗?

  2. 同样,如果我在 render() 方法中获取登录用户,是否需要在 doSomething() 方法中再次获取它?或者在 mount() 方法中获取 $admin 用户,将其分配给公共属性,然后在 doSomething() 方法中使用 $this->admin 调用该公共属性会更有效吗?

laravel security laravel-livewire
1个回答
0
投票

也许对你有帮助

https://www.youtube.com/watch?v=SG5g4bU4ZKU

在这段视频中,他谈论的是安全性和速度

© www.soinside.com 2019 - 2024. All rights reserved.