Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Crypter un mot de passe en PHP 8
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
CybersécuritéDéveloppement

Crypter un mot de passe en PHP 8

L'Équipe Alphorm Par L'Équipe Alphorm 18 janvier 2025
Partager
22e lecture en min
Partager
Cet article fait partie du guide Tutoriel Complet pour Apprendre PHP 8 à Travers des Projets Pratiques, partie 25 sur 28.

Stocker des mots de passe en clair dans une base de données expose vos applications PHP à des risques de sécurité élevés.

Sans cryptage, vos données sensibles sont vulnérables aux attaques, entraînant des violations de données, une perte de confiance des utilisateurs, et des conséquences légales.

Cet article détaille comment sécuriser vos applications PHP en cryptant les mots de passe avec password_hash() et en les vérifiant avec password_verify(), tout en manipulant les variables superglobales $_POST pour renforcer la sécurité des données utilisateurs.

Table de matière
Créer une Base de Données Sécurisée en PHP 8Créer le Formulaire d'Inscription Utilisateur en PHP 8Styliser le Formulaire d'Inscription en PHP 8Ajouter de l'Interactivité au Formulaire d'Inscription en PHP 8Configurer le Formulaire d'Accès au Compte en PHP 8Initialiser une Instance avec la Classe PDO en PHP 8Rédiger la Requête d'Insertion en PHP 8Optimiser la Requête d'Insertion pour la ValidationVérifier l'Existence du Login Utilisateur en PHP 8Créer la Requête d'Accès SécuriséCrypter un Mot de Passe en Base de Données en PHP 8Utiliser password_verify pour Vérifier le Mot de PasseDévelopper la Zone Admin en PHP 8Organiser le Code PHP 8 dans des Fichiers SéparésRésumé des Meilleures Pratiques de Sécurité PHP 8Conclusion

Créer une Base de Données Sécurisée en PHP 8

Pour commencer à sécuriser les mots de passe, vous devez d’abord créer une base de données et une table dédiée aux utilisateurs. Nous allons utiliser phpMyAdmin pour cette étape.

Schéma de la base de données Alphorm avec les tables utilisateur et leurs relations.

Étape 1 : Créer la base de données

Dans phpMyAdmin, créez une nouvelle base de données appelée alphorm :

  • Connectez-vous à phpMyAdmin.
  • Cliquez sur l’onglet Bases de données.
  • Saisissez le nom de la base de données : alphorm.
  • Cliquez sur Créer.
phpMyAdmin est un outil populaire pour la gestion des bases de données MySQL/MariaDB via une interface web. Il est largement utilisé pour créer et gérer des bases de données, des tables, des champs, etc.

Étape 2 : Créer la table user

Une fois la base de données créée, vous allez créer une table appelée user avec les champs suivants :

  • userID : Identifiant unique de l’utilisateur (clé primaire).
  • login : Nom d’utilisateur, doit être unique.
  • pass : Mot de passe crypté.

Procédure :

  • Dans phpMyAdmin, sélectionnez la base de données alphorm.
  • Cliquez sur Nouvelle table et nommez-la user.
  • Ajoutez les champs suivants :

userID : type INT, cochez A_I (Auto-Increment), cochez PRIMARY (clé primaire).

login : type VARCHAR(50), cochez UNIQUE (unique).

pass : type VARCHAR(50).

  • Cliquez sur Enregistrer.

Résultat final :

Structure de la table utilisateur de la base de données Alphorm avec les champs définis.
Oublier d’attribuer la propriété Auto-Increment à userID peut provoquer des erreurs lorsque vous essayez d’insérer de nouveaux utilisateurs sans spécifier un identifiant unique.

Créer le Formulaire d'Inscription Utilisateur en PHP 8

Dans cette section, vous allez créer un formulaire d’inscription simple qui permet aux utilisateurs de créer un compte en saisissant un nom d’utilisateur et un mot de passe. Ce formulaire sera traité par le même fichier index.php.

  • Code HTML pour le formulaire d’inscription :

Voici le code que vous avez écrit pour la page d’inscription :

				
					<!DOCTYPE html>
<html lang="en">
<head>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Créer votre Compte</title>
<style id="wpr-lazyload-bg-container"></style><style id="wpr-lazyload-bg-exclusion"></style>
<noscript>
<style id="wpr-lazyload-bg-nostyle">.jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https://blog.alphorm.com/wp-content/plugins/jet-tabs/assets/images/spinner-32.svg');}.rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https://blog.alphorm.com/wp-content/plugins/wp-rocket/assets/img/youtube.png');}</style>
</noscript>
<script type="application/javascript">const rocket_pairs = [{"selector":".jet-image-accordion__item-loader span","style":".jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg');}","hash":"b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg"},{"selector":".rll-youtube-player .play","style":".rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png');}","hash":"054bc5e2-f811-4227-a33d-a1f906a0cc31","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png"}]; const rocket_excluded_pairs = [];</script></head>
<body>
<section>
<form action="" method="post">
<h1>Créer votre Compte</h1>
<input type="text" name="login" placeholder="login">
<input type="text" name="pass" placeholder="password">
<input type="submit" name="create" value="Créer mon Compte">
</form>
<a href="" data-wpel-link="internal" target="_self" rel="follow noopener noreferrer">Accés Compte</a>
</section>
<script>class RocketElementorAnimation{constructor(){this.deviceMode=document.createElement("span"),this.deviceMode.id="elementor-device-mode-wpr",this.deviceMode.setAttribute("class","elementor-screen-only"),document.body.appendChild(this.deviceMode)}_detectAnimations(){let t=getComputedStyle(this.deviceMode,":after").content.replace(/"/g,"");this.animationSettingKeys=this._listAnimationSettingsKeys(t),document.querySelectorAll(".elementor-invisible[data-settings]").forEach(t=>{const e=t.getBoundingClientRect();if(e.bottom>=0&&e.top<=window.innerHeight)try{this._animateElement(t)}catch(t){}})}_animateElement(t){const e=JSON.parse(t.dataset.settings),i=e._animation_delay||e.animation_delay||0,n=e[this.animationSettingKeys.find(t=>e[t])];if("none"===n)return void t.classList.remove("elementor-invisible");t.classList.remove(n),this.currentAnimation&&t.classList.remove(this.currentAnimation),this.currentAnimation=n;let s=setTimeout(()=>{t.classList.remove("elementor-invisible"),t.classList.add("animated",n),this._removeAnimationSettings(t,e)},i);window.addEventListener("rocket-startLoading",function(){clearTimeout(s)})}_listAnimationSettingsKeys(t="mobile"){const e=[""];switch(t){case"mobile":e.unshift("_mobile");case"tablet":e.unshift("_tablet");case"desktop":e.unshift("_desktop")}const i=[];return["animation","_animation"].forEach(t=>{e.forEach(e=>{i.push(t+e)})}),i}_removeAnimationSettings(t,e){this._listAnimationSettingsKeys().forEach(t=>delete e[t]),t.dataset.settings=JSON.stringify(e)}static run(){const t=new RocketElementorAnimation;requestAnimationFrame(t._detectAnimations.bind(t))}}document.addEventListener("DOMContentLoaded",RocketElementorAnimation.run);</script></body>
</html>
				
			

Ce formulaire demande aux utilisateurs de saisir un login et un password pour créer un compte.

  • Résultat affiché :
Affichage du formulaire d'inscription utilisateur créé avec PHP et sécurisé avec PHP 8.

Styliser le Formulaire d'Inscription en PHP 8

Pour rendre votre formulaire d’inscription visuellement attrayant et convivial, vous avez utilisé du CSS pour styliser les éléments HTML. Voici une explication détaillée du code que vous avez créé.

  • Code CSS pour la mise en forme :
				
					@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
body{
font-family: 'Roboto',sans-serif;
height: 100vh;
margin: 0;
background-image: url('../img/fond.jpg');
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
background-position: center;
display: flex;
justify-content: center;
align-items: center;
}
section{
width: 300px;
background-color: #333;
padding: 20px;
text-align: center;
}
section h1{
color:#fff;
letter-spacing: 1px;
font-size: 26px;
}
section input{
display: block;
width: 100%;
padding: 0px 15px;
box-sizing: border-box;
outline: none;
}
				
			
  • Résultat affiché :
formulaire PHP pour la collecte de données utilisateur en ligne et amélioration SEO
Pour organiser votre code CSS et faciliter la maintenance, placez vos styles dans un fichier CSS externe. Ensuite, liez ce fichier à votre document HTML en ajoutant la ligne suivante dans la section de votre fichier index.php
				
					<link rel="stylesheet" href="ergonomie/css/style.css">
				
			

Ajouter de l'Interactivité au Formulaire d'Inscription en PHP 8

Pour améliorer l’expérience utilisateur, vous avez ajouté de nouveaux styles dans le fichier style.css qui donnent plus d’interactivité à votre formulaire d’inscription. Ces styles permettent d’ajouter des effets visuels lorsque les utilisateurs interagissent avec les champs du formulaire.

  • Code CSS complet pour l’interactivité :
				
					@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
body{
font-family: 'Roboto',sans-serif;
height: 100vh;
margin: 0;
background-image: url('../img/fond.jpg');
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
background-position: center;
display: flex;
justify-content: center;
align-items: center;
}
section{
width: 300px;
background-color: #333;
padding: 20px;
text-align: center;
}
section h1{
color:#fff;
letter-spacing: 1px;
font-size: 26px;
margin-top:60px;
}
section input{
display: block;
width: 100%;
padding: 0px 15px;
box-sizing: border-box;
border: none;
outline: none;
height : 40px;
}
section input[type="text"],section input[type="password"]{
margin: 20px 0;
border-radius: 6px;
opacity: 0.5;
transition: 0.7s;
}
section input[type="text"]:hover,section input[type="password"]:hover{
opacity: 1;
}
section input[type="submit"]{
margin-top: 40px;
margin-bottom: 20px;
border-radius: 50px;
background-color: rgb(12,151,144);
cursor: pointer;
color: #fff;
letter-spacing: 1px;
font-size: 20px;
transition: 0.7s;
}
section input[type="submit"]:hover{
transform: scale(0.95);
}
section a {
text-decoration: none;
color: #fff;
display: block;
font-size: 14px;
padding: 10px;
transition: 0.8s;
}
section a:hover{
background-color: #000;
opacity: 0.2;
}
::placeholder{
text-transform: capitalize;
}
				
			
  • Résultat affiché :
formulaire d'inscription interactif pour un blog IT avec éléments de design moderne

Formation PHP 8 : Introduction à la Sécurité

Default Value

Découvrir cette formation
formation php pour développeurs web avec outils pratiques et ressources en ligne

Configurer le Formulaire d'Accès au Compte en PHP 8

Dans cette section, vous allez mettre en place un formulaire pour permettre aux utilisateurs d’accéder à leur compte. Vous avez créé un fichier acces.php qui gère ce formulaire, et vous avez réutilisé les styles déjà définis dans style.css pour assurer une cohérence visuelle avec le formulaire d’inscription.

  • Code complet de « acces.php »
				
					<!DOCTYPE html>
<html lang="en">
<head>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Accès à votre Compte</title>
<link rel="stylesheet" href="ergonomie/css/style.css">
<style id="wpr-lazyload-bg-container"></style><style id="wpr-lazyload-bg-exclusion"></style>
<noscript>
<style id="wpr-lazyload-bg-nostyle">.jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https://blog.alphorm.com/wp-content/plugins/jet-tabs/assets/images/spinner-32.svg');}.rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https://blog.alphorm.com/wp-content/plugins/wp-rocket/assets/img/youtube.png');}</style>
</noscript>
<script type="application/javascript">const rocket_pairs = [{"selector":".jet-image-accordion__item-loader span","style":".jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg');}","hash":"b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg"},{"selector":".rll-youtube-player .play","style":".rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png');}","hash":"054bc5e2-f811-4227-a33d-a1f906a0cc31","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png"}]; const rocket_excluded_pairs = [];</script></head>
<body>
<section>
<form action="" method="post">
<h1>Accès à votre Compte</h1>
<input type="text" name="login" placeholder="login">
<input type="text" name="pass" placeholder="password">
<input type="submit" name="create" value="Accès Compte">
</form>
<a href="index.php" data-wpel-link="internal" target="_self" rel="follow noopener noreferrer">Créer Compte</a>
</section>
</body>
</html>
				
			
  • Résultat affiché :
Formulaire d'accès à un compte utilisateur en PHP.

Initialiser une Instance avec la Classe PDO en PHP 8

Dans cette section, vous allez créer une connexion sécurisée à la base de données en utilisant la classe PDO (PHP Data Objects). Pour cela, vous avez créé un dossier cnx qui contient un fichier cnx.php. Ce fichier sera responsable de l’établissement de la connexion à votre base de données MySQL.

  • Code complet de cnx.php :
				
					<?php
$dsn='mysql:host=localhost;dbname=alphorm;charset=utf8';
$user='root';
$pass='';
try{
$cnx=new PDO($dsn,$user,$pass);
}catch(PDOException $e){
echo 'Une erreur est survenue !';
}
				
			

Rédiger la Requête d'Insertion en PHP 8

Dans cette étape, vous allez ajouter un code PHP pour insérer les données d’inscription dans votre base de données. Vous avez déjà créé le fichier cnx.php pour établir la connexion à la base de données. Maintenant, vous allez utiliser cette connexion pour exécuter une requête d’insertion lorsque le formulaire d’inscription est soumis.

  • Code PHP pour l’insertion dans index.php :

Ajoutez le code suivant en haut de votre fichier index.php pour gérer l’insertion des données :

				
					<?php
include('cnx/cnx.php');
if(isset($_POST['create'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
//on insert le nouvel utilisateur
$sql='INSERT INTO user (login,pass) VALUES (:login,:pass)';
$req=$cnx->prepare($sql);
$req->execute(
array(
':login'=>$login,
':pass'=>$pass
)
);
}
?>
				
			
Ce code PHP s’assure que lorsque le formulaire est soumis (c’est-à-dire lorsque le bouton « Créer mon Compte » est cliqué), les informations fournies sont insérées dans la base de données. Il utilise des requêtes préparées pour éviter les injections SQL.

Avec ce code en place, vous êtes maintenant prêt à insérer les utilisateurs dans votre base de données. Assurez-vous de tester l’insertion avec des données exemple (comme stev_jobs avec le mot de passe 123) pour vérifier que tout fonctionne correctement.

Affichage après l'insertion d'un nouvel utilisateur dans la base de données sécurisée en PHP 8.

Optimiser la Requête d'Insertion pour la Validation

Vous avez ajouté une vérification pour vous assurer que les champs du formulaire ne sont pas vides avant d’insérer les données dans la base de données. Vous avez également ajouté des messages pour informer l’utilisateur du résultat de l’opération.

  • Code complet mis à jour de index.php :
				
					<?php
include('cnx/cnx.php');
$message = '';
if(isset($_POST['create'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
//on insert le nouvel utilisateur
$sql='INSERT INTO user (login,pass) VALUES (:login,:pass)';
$req=$cnx->prepare($sql);
$req->execute(
array(
':login'=>$login,
':pass'=>$pass
)
);
$message='<span class="success">Votre compte a bien été créé</span>';
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
?>
				
			
  • Résultat du test :

Lorsque je clique sur le bouton de « Créer mon Compte » avec les champs login ou password vide il m’affiche ce message d’erreur :

Conditionnement de requête d'insertion en SQL pour optimisation des bases de données

Sinon Si les champs sont remplis par exemple avec Elon_Musk comme une login et 456 comme une password il affiche un message de succès comme :

Message de succès après l'insertion d'un utilisateur avec validation des données en PHP 8.

PHP 8

Maîtrise Complète de PHP 8 : De l'Initiation à l'Expertise en Architecture MVC

Découvrir cette formation
Guide complet PHP 8 pour développement web et meilleures pratiques IT

Vérifier l'Existence du Login Utilisateur en PHP 8

Dans cette étape, vous allez ajouter une vérification pour vous assurer que le login n’existe pas déjà dans la base de données avant d’insérer un nouvel utilisateur. Vous avez introduit une requête pour vérifier la présence du login, mais quelques ajustements sont nécessaires pour que le code fonctionne correctement.

  • Code PHP mis à jour de index.php :
				
					<?php
include('cnx/cnx.php');
$message = '';
if(isset($_POST['create'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
// on vérifier si le login existe
$sql2='SELECT login FORM user WHERE login = :login';
$res2 = $cnx->prepare($sql2);
$req->execute(
array(
':login'=>$login
)
);
$count = $req2->rowcount();
if($count <=0){
//on insert le nouvel utilisateur
$sql='INSERT INTO user (login,pass) VALUES (:login,:pass)';
$req=$cnx->prepare($sql);
$req->execute(
array(
':login'=>$login,
':pass'=>$pass
)
);
$message='<span class="success">Votre compte a bien été créé</span>';
} else{
$message='<span class="error">Ce login est déja présent</span>';
}
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
?>
				
			
  • Résultat du test :

Ici lorsqu’en met un utilisateur déjà existe dans la base de donner il afficher cette erreur :

Affichage de la vérification de la présence d'un login utilisateur avant insertion en PHP 8.

Créer la Requête d'Accès Sécurisé

Dans cet axe, vous mettez en place la logique pour vérifier les informations d’identification lors de la connexion. Le code PHP vérifie si les informations de connexion fournies par l’utilisateur sont correctes et affiche un message en conséquence.

  • Code PHP mis à jour de acces.php :
				
					<?php
include('cnx/cnx.php');
$message = '';
if(isset($_POST['acces'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
// on vérifier si le login sont ok
$sql2='SELECT login,pass FROM user WHERE login = :login AND pass = :pass';
$req2 = $cnx->prepare($sql2);
$req2->execute(
array(
':login'=> $login,
':pass' => $pass
)
);
$count = $req2->rowcount();
if($count > 0){
$message = '<span class="success">ACCES OK</span>';
} else{
$message='<span class="error">Erreur de Login et/ou de Password</span>';
}
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
?>
				
			
  • Résultat du test :

Ici, si vous utilisez un identifiant déjà inscrit, comme steve_jobs, avec un mot de passe incorrect, comme 456, un message d’erreur s’affichera, indiquant que l’identifiant ou le mot de passe est incorrect

Erreur de connexion PHP écran avec message d'erreur utilisateur et mot de passe

Sinon c’est vous avez saisir le login et le mot de passe corrcete comme steve_jobs ave le code de 123 voila le résultat :

connexion réussie à un site web en PHP interface utilisateur sécurité informatique

Crypter un Mot de Passe en Base de Données en PHP 8

Pour améliorer la sécurité de votre application, il est crucial de ne pas stocker les mots de passe en clair dans la base de données. Le processus de cryptage (ou plutôt de hachage, dans le contexte des mots de passe) permet de stocker une version sécurisée du mot de passe qui est difficile à déchiffrer même si la base de données est compromise.

Affichage après le cryptage d'un mot de passe utilisateur en base de données en PHP 8.
  • Exemple de code pour index.php :

Dans le fichier index.php, il suffit de modifier cette ligne pour attribuer une valeur au champ pass comme ceci :

				
					':pass' => password_hash($pass,PASSWORD_DEFAULT)
				
			
Avant de faire cette modification, il faut d’abord changer la taille du champ pass dans la base de données à 255.
  • Résultat du test :

Dans ce cas, vous avez inséré un nouvel utilisateur nommé Marc avec un mot de passe 789. Voici comment il est inséré dans la table user de la base de données alphorm :

Affichage du processus de décryptage sécurisé des mots de passe avec PHP 8.

Utiliser password_verify pour Vérifier le Mot de Passe

Contrairement aux algorithmes de chiffrement traditionnels, les mots de passe ne sont pas réellement « décryptés » lorsqu’ils sont vérifiés. Au lieu de cela, un mot de passe est comparé au hachage stocké en utilisant des techniques de vérification sécurisées. En PHP, cela se fait avec la fonction password_verify.

Affichage de la zone admin pour gérer les utilisateurs et les données sécurisées avec PHP 8.
Lorsque vous stockez des mots de passe, vous utilisez une fonction de hachage comme password_hash, qui génère un hachage sécurisé. Lors de la connexion, vous utilisez password_verify pour comparer le mot de passe fourni par l’utilisateur avec le hachage stocké dans la base de données. Si les deux correspondent, l’accès est accordé.
  • Exemple de Code pour acces.php :

Voici le code modifié pour acces.php, utilisant password_verify pour vérifier le mot de passe de l’utilisateur :

				
					<?php
include('cnx/cnx.php');
$message = '';
if(isset($_POST['acces'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
// on vérifier si le login sont ok
$sql2='SELECT login,pass FROM user WHERE login = :login';
$req2 = $cnx->prepare($sql2);
$req2->execute(
array(
':login'=> $login
)
);
$data = $req2->fetch(PDO::FETCH_ASSOC);
if(password_verify($pass,$data['pass'])){
$message = '<span class="success">ACCES OK</span>';
} else{
$message='<span class="error">Password incorrect </span>';
}
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
?>
				
			
  • Résultat du test :

Voici un test avec le dernier utilisateur que vous avez inscrit, qui est Marc avec le mot de passe 789 :

Illustration du décryptage sécurisé de mot de passe avec PHP 8.

Développer la Zone Admin en PHP 8

Pour mettre en place une zone d’administration dans votre application, voici le code de base pour admin/index.php. Ce code vérifie la session de l’utilisateur et affiche l’identifiant de l’utilisateur s’il est connecté en tant qu’administrateur :

  • Exemple de Code pour admin/index.php:
				
					<?php
session_start();
$userID='';
if(isset($_SESSION['userID'])){
$userID = $_SESSION['userID'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zone Admin</title>
<link rel="stylesheet" href="../ergonomie/css/style.css">
<style id="wpr-lazyload-bg-container"></style><style id="wpr-lazyload-bg-exclusion"></style>
<noscript>
<style id="wpr-lazyload-bg-nostyle">.jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https://blog.alphorm.com/wp-content/plugins/jet-tabs/assets/images/spinner-32.svg');}.rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https://blog.alphorm.com/wp-content/plugins/wp-rocket/assets/img/youtube.png');}</style>
</noscript>
<script type="application/javascript">const rocket_pairs = [{"selector":".jet-image-accordion__item-loader span","style":".jet-image-accordion__item-loader span{--wpr-bg-b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg');}","hash":"b5f84ee5-f0b7-432a-b1bd-0f52e4b9e5ba","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/jet-tabs\/assets\/images\/spinner-32.svg"},{"selector":".rll-youtube-player .play","style":".rll-youtube-player .play{--wpr-bg-054bc5e2-f811-4227-a33d-a1f906a0cc31: url('https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png');}","hash":"054bc5e2-f811-4227-a33d-a1f906a0cc31","url":"https:\/\/blog.alphorm.com\/wp-content\/plugins\/wp-rocket\/assets\/img\/youtube.png"}]; const rocket_excluded_pairs = [];</script></head>
<body>
<section>
<h1>Zone Admin</h1>
<?= $userID; ?>
</section>
</body>
</html>
				
			

Explication du Code :

  • Session Start :
    • session_start() est appelé au début pour démarrer la session PHP. Cela permet de gérer les variables de session comme $_SESSION['userID'].
  • Vérification de la Session :
    • if (isset($_SESSION['userID'])) { ... } : Cette condition vérifie si la variable de session userID existe. Si oui, elle récupère la valeur de $_SESSION['userID'] dans la variable $userID.
  • Affichage dans la Zone Admin :
    • À l’intérieur de la section HTML, <h1>Zone Admin</h1> affiche le titre de la page.
    • <?= $userID; ?> affiche dynamiquement l’identifiant de l’utilisateur connecté. Vous pouvez personnaliser cette section pour afficher d’autres informations pertinentes pour l’administration.
dans le code de acces.php il faut ajouter cette ligne après la vérification que le login et mot de passe sont correcte : $_SESSION[‘userID’] = $data[‘userID’]; header(‘location:admin/’);
  • Résultat du test :
zone d'administration PHP mise en place pour gestion de site web IT

Organiser le Code PHP 8 dans des Fichiers Séparés

Dans cette section Vous avez bien structuré votre code en déplaçant la logique PHP dans un fichier séparé _script.php. Cela rend le code plus maintenable et réutilisable. Voici un récapitulatif et quelques ajustements mineurs pour optimiser votre approche.

  • Fichier « _script.php «   :
				
					<?php
include('cnx/cnx.php');
$message = '';
if($fichier == 'CREECOMPTE'){
if(isset($_POST['create'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
// on vérifie si le login existe
$sql2='SELECT login FROM user WHERE login = :login';
$req2 = $cnx->prepare($sql2);
$req2->execute(
array(
':login'=> $login
)
);
$count = $req2->rowcount();
if($count <=0){
//on insert le nouvel utilisateur
$sql='INSERT INTO user (login,pass) VALUES (:login,:pass)';
$req=$cnx->prepare($sql);
$req->execute(
array(
':login'=>$login,
':pass' => password_hash($pass,PASSWORD_DEFAULT)
)
);
$message='<span class="success">Votre compte a bien été créé</span>';
} else{
$message='<span class="error">Ce login est déja présent</span>';
}
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
}elseif($fichier == 'ACCESCOMPTE'){
if(isset($_POST['acces'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
if(!empty($login) || !empty($pass)){
// on vérifier si le login sont ok
$sql2='SELECT login,pass FROM user WHERE login = :login';
$req2 = $cnx->prepare($sql2);
$req2->execute(
array(
':login'=> $login
)
);
$data = $req2->fetch(PDO::FETCH_ASSOC);
if(password_verify($pass,$data['pass'])){
$_SESSION['userID'] = $data['userID'];
header('location:admin/');
} else{
$message='<span class="error">Password incorrect </span>';
}
}else{
$message='<span class="error">Merci de remplir tous les champs</span>';
}
}
}
?>
				
			
  • Code pour index.php
				
					<?php
$fichier = 'CREERCOMPE';
include('_script.php');
?>
Code pour acces.php :
<?php
session_start();
$fichier = 'ACCESCOMPTE';
include('_script.php');
?>
				
			
N’oubliez pas de changer le type de l’input du mot de passe en password au lieu de texte.
				
					<input type="password" name="pass" placeholder="password">
				
			

Résumé des Meilleures Pratiques de Sécurité PHP 8

Dans cet article, vous avez appris à sécuriser les mots de passe des utilisateurs en les cryptant avant de les stocker dans une base de données et à les décrypter lors de l’accès. Les étapes principales incluent la configuration de la base de données, la création de formulaires d’inscription et de connexion, et l’utilisation des fonctions PHP pour le cryptage et le décryptage des mots de passe.

Fonction PHP
Utilisation
password_hash()
Crypter un mot de passe avant de le stocker en base de données.
password_verify()
Vérifier un mot de passe crypté lors de la connexion.

Points Clés

  • Cryptage : Utilisation de password_hash() pour sécuriser le mot de passe avant de l’insérer dans la base de données.
  • Décryptage : Vérification du mot de passe à l’aide de password_verify() pour comparer l’entrée utilisateur avec le mot de passe crypté stocké.

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui. Découvrez des cours variés pour tous les niveaux !

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

Conclusion

La sécurisation des mots de passe en PHP 8 est cruciale pour protéger les données utilisateur. En utilisant des fonctions comme password_hash et password_verify, vous pouvez renforcer la sécurité de votre application PHP 8. De plus, une gestion efficace de la base de données et une zone d’administration sécurisée sont essentielles pour maintenir une application fiable et performante.

Cet article fait partie du guide Tutoriel Complet pour Apprendre PHP 8 à Travers des Projets Pratiques, partie 25 sur 28.
< Gérer les sessions en PHP 8Sécuriser un Formulaire contre les Spams avec PHP 8 >

ÉTIQUETÉ : PHP8
Facebook
Twitter
LinkedIn
Email
WhatsApp
Par L'Équipe Alphorm
Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.

Derniers Articles

  • Techniques pour gérer les fichiers texte en C#
  • Créer et lire un fichier CSV avec C#
  • JSON : Comprendre et Utiliser Efficacement
  • Créer une Base SQLite dans C#
  • Lecture des données SQLite simplifiée
Blog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Crypter un mot de passe en PHP 8

© Alphorm - Tous droits réservés