入力を丸ごと保存する(マスアサインメント)
送られてきた項目を全部そのまま保存すると、画面にない is_admin なども送られて、書き換えられてしまう。
✕ 危ないUser::create($request->all());
○ こうする// モデルで、書き込んでよい列を決める
#[Fillable(['name', 'email'])]
class User extends Model { /* ... */ }
// (Laravel 12 までは protected $fillable = [...])
// チェックを通った値だけを使う
User::create($request->validated()); 設定の不備も見てください
Laravel「Mass Assignment」 ↗ / Laravel「Form Request Validation」 ↗
「この人がしてよいか」を確かめ忘れる
ログインしているかだけを見て、その投稿の持ち主かを確かめないと、ID を変えるだけで他人の投稿を直せてしまう。
✕ 危ない$post = Post::findOrFail($id);
$post->update($data); // だれの投稿でも直せる
○ こうするGate::authorize('update', $post); // ポリシーで確かめる
$post->update($data); ID の書き換え(IDOR)へ
Laravel「Authorizing Actions Using Policies」 ↗