@ -8,11 +8,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php")
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.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 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 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.
* Elle hache le mot de passe du formulaire et le compare à celui de l'entrée correspondante en base.
*/
*/
function validationIdentifiants($pdo,$identifiant,$mdp) {
function validationIdentifiants($pdo,$identifiant,$mdp) {
try {
try {
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
@ -35,12 +35,12 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
if ($comptage == 1) {
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 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 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.
* 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.
* 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_base=explode('$', $result['0']['mot_de_passe']);
$mot_de_passe_form=crypt(trim("$mdp"), "$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$");
$mot_de_passe_form=crypt(trim("$mdp"), "$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$");
@ -56,6 +56,10 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
return false;
return false;
}
}
/*
* Fonction d'initialisation des valeurs de session.
* Elle utilise les informations de l'utilisateur en base de données pour initialiser une session personnalisée.
*/
function initValeursSession($result) {
function initValeursSession($result) {
$_SESSION['id_utilisateur'] = $result[0]['id'];
$_SESSION['id_utilisateur'] = $result[0]['id'];
$_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur'];
$_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur'];
@ -64,18 +68,28 @@ function initValeursSession($result) {
$_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur'];
$_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur'];
}
}
/*
* Fonction de création d'un cookie de connexion automatique.
* Si la case "Se souvenir de moi" est cochée au formulaire de connexion, un cookie d'une durée d'un mois est créé.
*/
function creerCookie($result) {
function creerCookie($result) {
$cookie_params = array (
$cookie_params = array (
'expires' => time() + 60*60*24*30,
'expires' => time() + 60*60*24*30,
'path' => '/',
'path' => '/',
'domain' => $_SERVER['HTTP_HOST'],
'domain' => $_SERVER['HTTP_HOST'],
'secure' => false, // Mettre à true en prod (PENSER À LE FAIRE DANS deconnexion.php ET "Prolongement de la durée du cookie" AUSSI !)
'secure' => false, // Mettre à true pour ne le créer qu'en HTTPS (le faire également dans "deconnexion.php" et au commentaire "Prolongement de la durée du cookie." plus bas).
'httponly' => true,
'httponly' => true,
'samesite' => 'Strict'
'samesite' => 'Strict'
);
);
setcookie('souvenir-session', htmlspecialchars($_SESSION['pseudo_utilisateur']).'|--@--|'.hash('sha3-512', $result['0']['id'].$result['0']['utilisateur'].$result['0']['mot_de_passe']), $cookie_params);
setcookie('souvenir-session', htmlspecialchars($_SESSION['pseudo_utilisateur']).'|--@--|'.hash('sha3-512', $result['0']['id'].$result['0']['utilisateur'].$result['0']['mot_de_passe']), $cookie_params);
}
}
/*
* Fonction de validation du cookie de connexion automatique.
* Vérifie la légitimité du cookie de connexion de l'utilisateur via les informations en base de données.
* Si légitime, une session PHP est initialisée et le cookie est renouvelé pour un mois supplémentaire.
* Si non légitime, la fonction ne fait rien. Le comportement du site s'en remet alors à la seule existence d'une session PHP.
*/
function validationCookie($pdo) {
function validationCookie($pdo) {
if (isset($_COOKIE['souvenir-session'])) {
if (isset($_COOKIE['souvenir-session'])) {
if (!isset($_SESSION['id_utilisateur'])) {
if (!isset($_SESSION['id_utilisateur'])) {
@ -89,7 +103,6 @@ function validationCookie($pdo) {
$result = $sql ->fetchAll(PDO::FETCH_ASSOC);
$result = $sql ->fetchAll(PDO::FETCH_ASSOC);
$comptage = count($result);
$comptage = count($result);
}
}
catch(PDOException $e) {
catch(PDOException $e) {
die ("Erreur lors du traitement de la requête : " . $e->getMessage());
die ("Erreur lors du traitement de la requête : " . $e->getMessage());
@ -110,12 +123,11 @@ function validationCookie($pdo) {
else
else
return false;
return false;
}
}
// Prolongement de la durée du cookie
// Prolongement de la durée du cookie.
setcookie('souvenir-session', $_COOKIE['souvenir-session'], ['expires' => time() + 60*60*24*30, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], 'secure' => false, 'httponly' => true, 'samesite' => 'strict']);
setcookie('souvenir-session', $_COOKIE['souvenir-session'], ['expires' => time() + 60*60*24*30, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], 'secure' => false, 'httponly' => true, 'samesite' => 'strict']);
}
}
else
else
return false;
return false;
}
}
?>
?>