From ccc9a05b758f1dc0313b96807edfc447a9e8d278 Mon Sep 17 00:00:00 2001 From: polo Date: Thu, 8 Feb 2024 04:31:14 +0100 Subject: RGPD cookie uniquement en mode admin et avertissement, logo journal --- controller/password.php | 346 ++++++++++++++++++++++++++---------------------- 1 file changed, 191 insertions(+), 155 deletions(-) (limited to 'controller/password.php') diff --git a/controller/password.php b/controller/password.php index fa4f2c1..5e556e9 100644 --- a/controller/password.php +++ b/controller/password.php @@ -1,27 +1,31 @@ caractères HTML dangereux supprimés + // -> empêche validation par erreur d'une chaine "vide" + require('controller/Security.php'); + $password = Security::secureString($_POST['motdepasse']); + $password = removeSpacesTabsCRLF($_POST['motdepasse']); + + // enregistrement et redirection + if(isset($password) && $password == $_POST['motdepasse']) + { + hashNewPassword($_POST['motdepasse']); + header('Location: index.php'); + exit(); + } + else + { + $error = 'bad_password'; + } } } - // saisie non valide - elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0) - { - sleep(1); - echo($header); - echo($errorNonValidCaptcha); - echo($formulaireNouveauMDP); - echo($errorBadCharacters); - } - // mauvais captcha - elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) + else // première fois + {} + + // inséré dans $captchaHtml puis dans $formulaireNouveauMDP + $captcha = createCaptcha(); + // enregistrement de la réponse du captcha pour vérification + saveSolutionCaptcha($captcha[2]); + + + // II - affichage + $title = 'Bienvenue Melaine Favennec'; + $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.'; + + // même vue que la fonction changerMotDePasse() + require('view/password.php'); + + echo($header); + if($error != '') { sleep(1); - echo($header); - echo($errorCaptcha); - echo($formulaireNouveauMDP); - echo($errorBadCharacters); - } - // 1ère fois - else - { - echo($header); - echo($formulaireNouveauMDP); - echo($errorBadCharacters); - //echo($warning); // message pas top + echo($error_messages[$error]); } + echo($formulaireNouveauMDP); + echo($error_messages['forbidden_characters']); echo($footer); - - // fois suivante (dispense de nettoyer la variable) - $_SESSION['captcha'] = $captcha[2]; - exit(); } function connect() { + // I - traitement // déjà en mode admin - if($_SESSION['admin'] == 1) + global $cookie; // nom du cookie dans cookies.php + if(isset($_COOKIE[$cookie])) { - header('Location: index.php?page=' . $_GET['from']); - exit(); + header('Location: index.php?page=' . $_GET['from']); + exit(); } - // Ajouter une sécurité par cpatcha avec un "input" supplémentaire + // contrôle de la saisie + $file_name = 'data/tmp/solution.txt'; + $error = ''; + if(file_exists($file_name)) + { + $captcha_solution = file_get_contents($file_name); + unlink($file_name); + + if(empty($_POST)) // page rechargée + {} + elseif(!isset($_POST['captcha']) || controlCaptchaInput() == 0) + { + $error = 'error_non_valid_captcha'; + } + elseif($_POST['captcha'] != $captcha_solution) + { + $error = 'bad_solution_captcha'; + } + elseif(!isset($_POST['motdepasse']) || empty($_POST['motdepasse'])) + { + $error = 'bad_password'; + } + else + { + // enregistrement et redirection + if(testPassword($_POST["motdepasse"])) + { + session_name($cookie); + session_start(); + header('Location: index.php?page=' . $_GET['from']); + exit(); + } + else + { + $error = 'bad_password'; + } + } + } + else // première fois + {} + + // inséré dans $captchaHtml puis dans $formulaireNouveauMDP $captcha = createCaptcha(); - // Et créer une variable de session pour la réponse au CAPTCHA + // enregistrement de la réponse du captcha pour vérification + saveSolutionCaptcha($captcha[2]); + + // II - affichage $title = "Connexion"; $subHeading = "Veuillez saisir votre mot de passe pour pouvoir apporter des modifications au site."; - - // cette page utilise la même vue que la fonction changerMotDePasse() dans controller/admin.php + // même vue que la fonction changerMotDePasse() require('view/password.php'); echo($header); - - // bon codes (mot de passe et captcha) - if(isset ($_POST["motdepasse"]) && testPassword($_POST["motdepasse"]) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha']) - { - $_SESSION['admin'] = 1; - unset($_SESSION['captcha']); // nettoyage - header('Location: index.php?page=' . $_GET['from']); - exit(); - } - // saisie non valide - elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0) - { - echo($errorNonValidCaptcha); - sleep(1); - echo($formulaireConnexion); - } - // mauvais captcha - elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) + //echo($warning_messages['message_disconnect']); + if($error != '') { - echo($errorCaptcha); sleep(1); - echo($formulaireConnexion); + echo($error_messages[$error]); } + echo($formulaireConnexion); + echo($warning_messages['message_cookie']); + echo($warning_messages['private_browsing']); + echo($footer); +} - // mauvais codes - elseif(isset ($_POST["motdepasse"]) && !testPassword($_POST["motdepasse"])) - { - // défense aux attaques par force brute - // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site - echo($errorPassword); - sleep(1); - echo($formulaireConnexion); - } - // première arrivée sur la page - else - { - echo($formulaireConnexion); - } - - // fois suivante (dispense de nettoyer la variable) - $_SESSION['captcha'] = $captcha[2]; - - echo($messageDeconnect); - echo($footer); +function saveSolutionCaptcha(string $solution) +{ + $file_name = 'data/tmp/solution.txt'; + if(!file_exists($file_name)) + { + touch($file_name); + chmod($file_name, 0600); + } + file_put_contents($file_name, $solution); } + function changePassword() { + // I - traitement // vérification supplémentaire - if($_SESSION['admin'] !== 1) + global $cookie; // nom du cookie dans cookies.php + if(!isset($_SESSION)) { - $_SESSION['admin'] = 0; + deleteCookie($cookie); header('Location: index.php?page=' . $_GET['from']); exit(); } - $title = "Nouveau mot de passe"; - $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; - - require('view/password.php'); - echo($header); - - // conformité du nouveau mot de passe - if(isset($_POST['nouveauMotdepasse']) && !empty($_POST['nouveauMotdepasse'])) + // contrôle de la saisie + $error = ''; + $success = false; + if(empty($_POST)) // première fois ou page rechargée + {} + elseif(!isset($_POST['nouveauMotdepasse']) || empty($_POST['nouveauMotdepasse'])|| !isset($_POST['ancienMotdepasse']) || empty($_POST['ancienMotdepasse'])) + { + $error = 'bad_password'; + } + else { require('controller/Security.php'); $newPassword = Security::secureString($_POST['nouveauMotdepasse']); $newPassword = removeSpacesTabsCRLF($_POST['nouveauMotdepasse']); - } - // bon mot de passe - if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse'] - && isset ($_POST["ancienMotdepasse"]) && testPassword($_POST["ancienMotdepasse"])) - { - // enregistrement et confirmation - hashNewPassword($_POST["nouveauMotdepasse"]); - echo($message); + if(isset($newPassword) && $newPassword !== $_POST['nouveauMotdepasse']) // erreur de conformité + { + $error = 'forbidden_characters'; + } + else + { + if(testPassword($_POST["ancienMotdepasse"])) + { + // enregistrement et confirmation + hashNewPassword($_POST["nouveauMotdepasse"]); + $success = true; + } + else + { + $error = 'bad_password'; + } + } } - // mauvais mot de passe - elseif(isset ($_POST["ancienMotdepasse"]) && !testPassword($_POST["ancienMotdepasse"])) + + + // II - affichage + $title = "Nouveau mot de passe"; + $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; + + require('view/password.php'); + + echo($header); + if($error != '') { - // défense aux attaques par force brute - // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site - echo($errorPassword); sleep(1); - echo($formulaireModifMDP); + echo($error_messages[$error]); } - // erreur de conformité - elseif(isset($newPassword) && $newPassword !== $_POST['nouveauMotdepasse']) + elseif($success) { - echo($errorBadCharacters); - echo($formulaireModifMDP); + echo($alertJSNewPassword); } - // première arrivée sur la page - else - { - echo($formulaireModifMDP); - } - - //echo($warning); + echo($formulaireModifMDP); echo($footer); } -// hachage function hashNewPassword(string $newPassword) { - // "réparation" des espaces accidentels - $newPassword= trim($newPassword); // hachage $newHashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); @@ -306,14 +347,9 @@ function hashNewPassword(string $newPassword) function testPassword(string $password): bool { - // lecture - $oldHashedPassword = file_get_contents('data/password.txt'); - - // "réparation" des espaces accidentels - $password= trim($password); - $oldHashedPassword = trim($oldHashedPassword); + $hashedPassword = file_get_contents('data/password.txt'); - if(password_verify($password, $oldHashedPassword)) + if(password_verify($password, $hashedPassword)) { return true; } -- cgit v1.2.3