すべてが正常に動作しているLaravelネストされたリソースのセキュリティ
route()->resources('user', 'UserController');
route()->resources('user.place', 'PostController');
route()->resources('user.place.picture', 'PictureController');
、私はこのようなリソースを入れ子にしている、私はなど、各時間に沿ってユーザーのIDを渡します...
あなたが場所に来るときは、これがあなたのものなら、私は編集していくつかの行動をとるためのボタンを表示します。だから私は$place.user_id == $user.id
ボタンを表示するかどうかを確認します。 Place.showため/user/1/place/2
:
は、私が所有者だと私は変更することができますが、別のユーザー(例えばUSER_ID 2)は私の場所を見て、同じURLを使用するならば、彼は何も変更することはできませんが、場所を見ることができます。私が見つけた何
は、このユーザーが同じURLを使用するが、その後採掘するのuser_idを変更した場合、彼は場所へのフルアクセスを持って、それを修正することができるということです。この動作を防止するための解決策があった場合、私はネストされたリソースのすべてのメソッドを保護する必要がある場合、それは長くなってきているためAuth::user()->id == $user->id
私は思ったんだけど何を、次のとおりです。
だからこれから保護するために、私は別の条件を追加しました実装するのが醜い。また、私は次のレベルに来るときuser.place.picture
。私が降りるたびに別のセキュリティ層を追加する必要があると思う。 $picture->place_id == $place->id
など。だから、
、ユーザーが何も防ぐないか1つのIDが変更されたかどうかをチェック右ユーザー、場所、写真IDでそれをクリックすることができますので、私はリンクを印刷します。最後のものが変更されている場合は、別の要素を取得するので問題ありません。しかし、私たちが親のIDを変更すると、特に私が途中でアクセスを許可すると、危険になる可能性があります。
私が逃した簡単な解決策がありますように!
ポリシー(https://laravel.com/docs/5.4/authorization)をご確認ください。 – Robert