Support exclusif des mots de passe hachés avec la fonction crypt pour l'authentification des utilisateurs + adaptation du format des identifiants utilisateurs de "nom" en "nom@domaine" + ajout de la possibilité pour un administrateur de gérer les possessions des autres utilisateurs + ajout d'une confirmation pour la suppression d'un alias virtuel + nettoyage du code + ajout de commentaires au format PHPDoc + gestion de certaines exceptions du pilote PDO SQLite + suppression du fichier testObjet.php + suppression des fins de lignes vides sur tous les fichiers

This commit is contained in:
ycharbi
2021-12-27 01:34:02 +01:00
parent c399aece89
commit c4f930fb73
32 changed files with 419 additions and 331 deletions
+27 -4
View File
@@ -1,16 +1,23 @@
<?php
/**
* Page de fonctions permettant d'identifier la légitimité d'un utilisateur.
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/bdd/connexion.php");
/*
*Fonction d'authentification des utilisateurs.
* Fonction d'authentification des utilisateurs.
* Elle récupère le couple identifiant/mot de passe renseigné par le visiteur sur la page d'accueil.
* Elle compare ces information avec la ligne correspondante dans la base de donnée (en prenant l'adresse de courriel comme sélecteur).
* Elle hache le mot de passe du formulaire et le compare à celui de l'entrée correspondante en base.
*/
function validationIdentifiants($pdo,$identifiant,$mdp){
try {
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant AND mot_de_passe=:mdp';
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
$prep = $pdo->prepare($req);
$prep->bindValue(':identifiant', $identifiant);
$prep->bindValue(':mdp', $mdp);
$prep->execute();
$result = $prep ->fetchAll(PDO::FETCH_ASSOC);
@@ -22,10 +29,26 @@ function validationIdentifiants($pdo,$identifiant,$mdp){
}
if($comptage == 1){
/**
* Les paramètres de la fonction crypt de $mot_de_passe_form sont composés du mot de passe issue du formulaire accueil ainsi que du sel.
* Les signes dollars sont des séparateurs. $mot_de_passe_base[1]=6=SHA512. $mot_de_passe_base[2]=au sel du mot de passe contenu dans la base.
* Les paramètres de sel sont issus du mot de passe haché contenu dans la base.
* L'opération de vérification s'adapte ainsi automatiquement aux algoritmes utilisés par Dovecot lors du hachage du mot de passe utilisateur.
*/
$mot_de_passe_base=explode('$', $result['0']['mot_de_passe']);
$mot_de_passe_form=crypt(trim("$mdp"), "$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$");
if ("$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$".$mot_de_passe_base[3]!=$mot_de_passe_form) {
// Si le mot de passe renseigné n'est le bon, le visiteur est redirigé vers la page d'accueil avec un message explicatif
header('Location: /services/utilisateurs/echec_auth.php');
die();
}
return $result;
}
else
return false;
}
?>
?>
+3 -2
View File
@@ -1,8 +1,9 @@
<?php
/**
* Déconnexion d'un utilisateur authentifié.
* Page permettant la déconnexion d'un utilisateur authentifié.
*/
// Récupération de la session
session_start ();
// Destruction des variables de la session
@@ -11,4 +12,4 @@
session_destroy ();
// Redirection de l'utilisateur vers la page d'authentifiaction
header('location: /pages/formulaire_accueil.php?succes=1');
?>
?>
+8 -1
View File
@@ -1,4 +1,11 @@
<?php
/**
* Page de redirection vers la page d'accueil.
* Elle est appelée par la page d'identification lorsqu'un visiteur n'est pas parvenu à s'identifier.
* Elle ajoute à cette redirection un temps d'attente pour limiter la fréquence des tentatives ainsi qu'une variable dans l'URL permettant l'affichage d'un message d'explication sur la redirection.
*/
header ("Refresh: 5;URL=/pages/formulaire_accueil.php?erreur=1");
?>
@@ -255,4 +262,4 @@ header ("Refresh: 5;URL=/pages/formulaire_accueil.php?erreur=1");
</section>
</div>
</body>
</html>
</html>
@@ -0,0 +1,31 @@
<div>
<form id="form_choix_utilisateur" action="/services/actions/changeUtilisateur.php" method="post">
<div>
<h1>Choix de l'adresse</h1>
<select name="choix_utilisateur" onchange="autosubmit(this);">
<?php
/**
* Remplis un menu déroulant permettant le choix de l'utilisateur par l'administrateur.
* Ce choix permettra de modifier les alias virtuels y étant rattachés.
* La valeur par défaut du menu est positionnée sur le compte administrateur actuellement connecté.
*/
try {
foreach ($liste_utilisateurs as $utilisateur_bdd => $utilisateur) {
if ($utilisateur['utilisateur']==$_SESSION['pseudo_utilisateur']) {
echo "<option value=\"".$utilisateur['utilisateur']."\" selected>".$utilisateur['utilisateur']."</option>\n";
}
elseif ($_SESSION['privilege_utilisateur']=="administrateur") {
echo "<option value=\"".$utilisateur['utilisateur']."\">".$utilisateur['utilisateur']."</option>\n";
}
}
}
catch (\Exception $e) {
die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage());
}
?>
</select>
</div>
</form>
</div>
+8 -1
View File
@@ -1,5 +1,12 @@
<?php
/**
* Page de traitement de l'identification d'un visiteur.
* Elle vérifie la présence des valeurs fournies par le formulaire de la page d'accueil et les passes à la fonction de validation.
* Si le visiteur a été authentifié, il devient un utilisateur et est redirigé vers la page d'administration centrale après ouverture de session (comportant ses informations et privilèges).
* Si le visiteur n'a pas été authentifié, il est redirigé vers la page d'accueil.
*/
require_once($_SERVER["DOCUMENT_ROOT"]."/services/utilisateurs/authentification.php");
if (isset($_POST['identifiant']) && isset($_POST['mdp']) && !empty($_POST['identifiant']) && !empty($_POST['mdp'])) {
@@ -7,7 +14,7 @@ if (isset($_POST['identifiant']) && isset($_POST['mdp']) && !empty($_POST['ident
/**
* Vérification des informations entrées par l'utilisateur.
*/
$result = validationIdentifiants($pdo,$_POST['identifiant'],$_POST['mdp']);
$result = validationIdentifiants($pdo,$_POST['identifiant'],trim($_POST['mdp']));
if($result) {
session_start();
+10 -3
View File
@@ -1,14 +1,21 @@
<?php
/**
* Page de fonctions permettant la vérification des permission d'un utilisateur ou d'un visiteur.
*/
/**
* Fonction testant le niveau de privilège d'un utilisateur authentifié ou non.
* Elle vérifie le privilège de l'utilisateur connecté et retourne la valeur adéquate.
* Si un visiteur ou un utilisateur ne remplis pas la bonne condition, il est redirigé à la page d'accueil avec un message expllicatif.
* Cette fonction devrait être appelée dans toute page de traitement.
*/
function testPrivileges(){
if (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="administrateur") {
return "administrateur";
}
elseif (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="utilisateur") {
return "utilisateur";
}
else {
header("Location: /pages/formulaire_accueil.php?erreur=2");
@@ -16,4 +23,4 @@ function testPrivileges(){
}
}
?>
?>