在一个项目中,我目前的工作,我有嵌套资源这样Laravel嵌套资源安全
route()->resources('user', 'UserController');
route()->resources('user.place', 'PostController');
route()->resources('user.place.picture', 'PictureController');
一切工作正常,我沿着每次传递用户等的ID ...
诀窍是当你来到一个地方,如果这是你的,我显示按钮来编辑和做一些动作。所以我检查$place.user_id == $user.id
是否显示按钮。 /user/1/place/2
为Place.show:
打一点,因为到例如访问地方煤矿的,我有以下URL后。
我主人这样的按钮显示,我可以修改,但如果另一个用户(USER_ID 2为例)使用相同的URL,看我的地方,他不能改变什么,但可以看到的地方。
我发现那是什么,如果该用户使用相同的URL,但改变USER_ID挖掘那么他就可以完全访问的地方,对其进行修改。
因此,为了防止这一点,我添加了另一个条件:Auth::user()->id == $user->id
什么我不知道是如果有一个解决方案来防止这种行为,因为如果我要保护一个嵌套的资源的每个方法它的变长并且难以执行。当我来到更高层次user.place.picture
。我想我每次下去都需要增加一层安全性。 $picture->place_id == $place->id
等。
所以,当我打印一个链接,以便用户可以点击它用正确的用户,地点,照片的身份证再没有什么阻止或检查,如果一个ID已被修改。如果最后一个被修改,那么就没有问题,因为它会检索另一个元素。但是,如果我们修改父母的身份证,这可能会很危险,特别是当我一路授予某些访问权限时。
希望有一个简单的解决方案,我错过了!
检出策略(https://laravel.com/docs/5.4/authorization) – Robert