Ce guide explique comment mettre en œuvre le cryptage et le déchiffrement pour données sensibles dans les modèles Laravel. En suivant ces étapes, vous pouvez sécuriser les données avant de les stocker dans la base de données et les décrypter lorsque le récupérer.
Prérequis
- Laravel : assurez-vous que vous utilisez un projet Laravel.
- Clé de cryptage : Laravel génère automatiquement une APP_KEY dans le fichier .env. Cette clé est utilisée par le service de cryptage de Laravel.
Étape 1 : Configurer le cryptage dans le modèle
Dans le modèle, nous utiliserons les fonctions encrypt() et decrypt() de Laravel pour gérer automatiquement le cryptage et le déchiffrement pour les champs spécifiés.
Modèle Docteur
Créez ou mettez à jour le modèle Docteur avec des méthodes de cryptage et de décryptage. Nous chiffrerons les champs tels que prénom, nom, e-mail et mobile avant de les enregistrer dans la base de données.
<?phpnamespace AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{ protected $fillable = [ 'first_name', 'last_name', 'email', 'mobile', 'hashed_email', 'password' ]; // Automatically encrypt attributes when setting them public function setFirstNameAttribute($value) { $this->attributes['first_name'] = encrypt($value); } public function setLastNameAttribute($value) { $this->attributes['last_name'] = encrypt($value); } public function setEmailAttribute($value) { $this->attributes['email'] = encrypt($value); } public function setMobileAttribute($value) { $this->attributes['mobile'] = encrypt($value); } // Automatically decrypt attributes when getting them public function getFirstNameAttribute($value) { return decrypt($value); } public function getLastNameAttribute($value) { return decrypt($value); } public function getEmailAttribute($value) { return decrypt($value); } public function getMobileAttribute($value) { return decrypt($value); }}
Explication
- Méthodes Setter : utilisez set{AttributeName }Attribute() pour crypter les données avant qu'elles ne soient stockées dans la base de données.
- Méthodes Getter : utilisez get{AttributeName}Attribute() pour déchiffrer les données lorsqu'elles sont récupérées de la base de données.
Étape 2 : Contrôleur pour le stockage et la récupération des données
Dans le contrôleur, vous pouvez gérer la validation et appelle le modèle attributs chiffrés directement sans cryptage/déchiffrement supplémentaire étapes.
DoctorController
Le DoctorController gère l'inscription en validant
saisir les données, les chiffrer via le modèle et les enregistrer dans la base de données.
Lors de la récupération des données du médecin, il décryptera automatiquement le
domaines sensibles.
<?phpnamespace AppHttpControllers;use IlluminateHttpRequest;use AppModelsDoctor;use IlluminateSupportFacadesHash;class DoctorController extends Controller{ public function register(Request $request) { // Validate the incoming request $validatedData = $request->validate([ 'first_name' => 'required|string|max:255', 'last_name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:doctors,email', 'mobile' => 'required|string|size:10|unique:doctors,mobile', 'password' => 'required|string|min:8|confirmed', ]); // Hash the email to ensure uniqueness $hashedEmail = hash('sha256', $validatedData['email']); // Create a new doctor record (model will handle encryption) $doctor = Doctor::create([ 'first_name' => $validatedData['first_name'], 'last_name' => $validatedData['last_name'], 'email' => $validatedData['email'], 'hashed_email' => $hashedEmail, 'mobile' => $validatedData['mobile'], 'password' => Hash::make($validatedData['password']), ]); return response()->json([ 'message' => 'Doctor registered successfully', 'doctor' => $doctor ], 201); } public function show($id) { // Fetch the doctor record (model will decrypt the data automatically) $doctor = Doctor::findOrFail($id); return response()->json($doctor); }}
Explication
- Méthode de registre : valide la demande entrante, crée un nouveau dossier médical et crypte automatiquement les champs tels que prénom, nom, e-mail et mobile grâce aux méthodes de cryptage du modèle.
- Méthode show : Récupère un dossier médical par ID. Le les méthodes getter du modèle décryptent automatiquement les champs sensibles avant renvoyer les données.
Étape 3 : Configuration de la base de données
Assurez-vous que les colonnes du tableau des médecins pour les données sensibles sont d'une longueur suffisante pour gérer les données cryptées (généralement, TEXT ou LONGTEXT).
Exemple de configuration de migration :
Schema::create('doctors', function (Blueprint $table) { $table->id(); $table->text('first_name'); $table->text('last_name'); $table->text('email'); $table->string('hashed_email')->unique(); // SHA-256 hashed email $table->text('mobile'); $table->string('password'); $table->timestamps();});
Remarque : étant donné que les valeurs chiffrées peuvent être beaucoup plus longues que les valeurs en texte brut, TEXT est préférable pour les valeurs chiffrées. champs.
Étape 4 : Gestion des exceptions de décryptage
Pour une gestion améliorée des erreurs, enveloppez la logique de décryptage dans des blocs try-catch dans les getters du modèle :
<?phpnamespace AppModels;use IlluminateDatabaseEloquentModel;use IlluminateSupportFacadesCrypt;class Doctor extends Model{ protected $fillable = [ 'first_name', 'last_name', 'email', 'mobile', 'hashed_email', 'password' ]; // Automatically encrypt attributes when setting them public function setFirstNameAttribute($value) { $this->attributes['first_name'] = encrypt($value); } public function setLastNameAttribute($value) { $this->attributes['last_name'] = encrypt($value); } public function setEmailAttribute($value) { $this->attributes['email'] = encrypt($value); } public function setMobileAttribute($value) { $this->attributes['mobile'] = encrypt($value); } // Automatically decrypt attributes when getting them public function getFirstNameAttribute($value) { return decrypt($value); } public function getLastNameAttribute($value) { return decrypt($value); } public function getEmailAttribute($value) { return decrypt($value); } public function getMobileAttribute($value) { return decrypt($value); }}
Notes supplémentaires
- Sécurité de l'environnement : assurez-vous que l'APP_KEY est stocké en toute sécurité dans le fichier .env. Cette clé est essentielle pour le cryptage/déchiffrement.
- Sauvegarde des données : si l'intégrité des données est cruciale, assurez-vous de disposer d'un mécanisme de sauvegarde, car les données cryptées ne peuvent pas être récupérées sans la bonne APP_KEY.
Résumé
- Cryptage du modèle : utilisez des méthodes de définition pour crypter les données avant de les stocker et des méthodes de lecture pour déchiffrer les données lors de la récupération.
- Logique du contrôleur : le contrôleur peut gérer les champs cryptés directement sans code de cryptage supplémentaire .
- Configuration de la base de données : utilisez des colonnes TEXT ou LONGTEXT pour les champs chiffrés.
- Sécurité Considérations : sécurisez votre APP_KEY et utilisez la gestion des exceptions dans les getters pour les erreurs de décryptage.
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!

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。

在laravel中,scope用于处理模型中的数据,在模型中可以定义scope开头方法,这类方法可以通过模型直接调用,被称为查询作用域,语法为“public function scope首字母大写单词($query){...}”。


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)