Maison > cadre php > Laravel > Comment activer la fonctionnalité 'Désactiver l'affectation par lots' dans Laravel

Comment activer la fonctionnalité 'Désactiver l'affectation par lots' dans Laravel

PHPz
Libérer: 2023-04-09 00:30:02
original
665 Les gens l'ont consulté

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 = [];
}
Copier après la connexion

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 = [&#39;name&#39;, &#39;email&#39;, &#39;password&#39;];
}
Copier après la connexion

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.');
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal