Dans le framework Laravel, l'affectation non par lots est une fonctionnalité de sécurité importante, qui permet d'empêcher les utilisateurs malveillants de falsifier les données de la base de données. Cependant, cette fonctionnalité a parfois des utilisations peu claires, provoquant une confusion parmi de nombreux programmeurs.
Lors de l'affectation par lots, le programmeur enregistre les données du formulaire directement dans la base de données via la méthode de création ou de mise à jour. Si aucune vérification n'est effectuée, les risques seront grands en raison de menaces graves telles que les attaques de pirates et les injections. Pour résoudre ce problème, Laravel a introduit une fonctionnalité qui désactive l'affectation par lots.
L'affectation par lots n'est pas possible, ce qui signifie que lors de l'utilisation de la méthode de création ou de mise à jour, si les champs autorisés à être enregistrés ne sont pas spécifiés, le programme filtrera automatiquement tous les champs illégaux. Cette fonctionnalité améliore non seulement la sécurité du programme, mais renforce également les contraintes de développement pour les programmeurs : seuls les champs explicitement autorisés peuvent être enregistrés dans la base de données.
Cette fonctionnalité peut être activée avec une ligne de code très simple. Utilisez l'attribut $guarded dans les modèles qui doivent interdire l'affectation par lots.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $guarded = []; }
Dans l'exemple, la propriété $guarded est un tableau vide, ce qui signifie que tous les champs sont modifiables.
Si vous souhaitez autoriser uniquement l'enregistrement de champs spécifiques, vous pouvez définir l'attribut $guarded sur un tableau contenant tous les champs dont la modification n'est pas autorisée, ou utiliser l'attribut $fillable.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $fillable = ['name', 'email', 'password']; }
Une meilleure approche consiste à effectuer la validation des données dans le contrôleur, puis à les enregistrer dans la base de données après validation. Cela peut éviter certains dysfonctionnements et problèmes de sécurité.
<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; class UserController extends Controller { public function store(Request $request) { $validatedData = $request->validate([ 'name' => 'required|string', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed', ]); $user = User::create($validatedData); return back()->with('success', 'User created successfully.'); } }
Tous les champs de saisie sont vérifiés ici via la méthode de validation. Si la vérification réussit, elle est enregistrée dans la base de données. Le code ci-dessus est non seulement hautement sécurisé, mais aussi très élégant.
En général, l'affectation non par lots de Laravel est un mécanisme parfait qui peut améliorer efficacement la sécurité du programme. Nous devons profiter de cette fonctionnalité autant que possible pour éviter les risques inutiles lors du développement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!