在一個項目中,我目前的工作,我有嵌套資源這樣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