From 2ac4254829fb27d878044978e4e89f15eeeddd23 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 1 Mar 2022 04:02:05 +0100 Subject: factorisation et pages manquantes --- controller/password.php | 79 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 27 deletions(-) (limited to 'controller/password.php') diff --git a/controller/password.php b/controller/password.php index 4ca9f4f..8f6a875 100644 --- a/controller/password.php +++ b/controller/password.php @@ -5,11 +5,25 @@ // affichage function createPassword() { - // si installation() vient de créer un fichier vide - $hashedPassword = trim(file_get_contents('data/password.txt')); + // création du fichier + if(!file_exists('data/password.txt')) + { + touch('data/password.txt'); + chmod('data/password.txt', 0600); + } + + // lecture + $hashedPassword = file_get_contents('data/password.txt'); + if($hashedPassword === false) + { + echo('Erreur: ouverture du fichier password.txt impossible.'); + exit(); + } + + // création du mot de passe if(empty($hashedPassword)) { - // paranoïa + // paranoïa? if(isset($_SESSION['admin'])) { unset($_SESSION['admin']); @@ -17,23 +31,31 @@ function createPassword() exit(); } - // au rechargement: un mot de passe a été saisi - // les espaces/tabulations sont considérés commes des erreurs - if(isset($_POST['motdepasse']) && !empty(trim($_POST['motdepasse']))) + // au rechargement après saisi + // impossible d'entrer un espace ou une tabulation et de valider par erreur + if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse'])) + { + // caractères non désirés supprimés + require('controller/Security.php'); + $password = Security::secureString($_POST['motdepasse']); + $password = removeSpacesTabsCRLF($_POST['motdepasse']); + } + // enregistrement + if(isset($password) && $password == $_POST['motdepasse']) { - // enregistrement hashNewPassword($_POST['motdepasse']); header('Location: index.php'); } // 1ère fois else { - $title = "Créer un mot de passe"; - $subHeading = "Veuillez choisir le mot de passe que vous utiliserez pour gérer le site."; + $title = 'Créer un mot de passe'; + $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.'; require('view/password.php'); echo($header); + echo($errorBadCharacters); echo($formulaireNouveauMDP); echo($warning); } @@ -103,37 +125,40 @@ function changePassword() $title = "Nouveau mot de passe"; $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; - // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php require('view/password.php'); - echo($header); - // traitements: vérification ancien mot de passe et choix du nouveau + // conformité du nouveau mot de passe + if(isset($_POST['nouveauMotdepasse']) && !empty($_POST['nouveauMotdepasse'])) + { + require('controller/Security.php'); + $newPassword = Security::secureString($_POST['nouveauMotdepasse']); + $newPassword = removeSpacesTabsCRLF($_POST['nouveauMotdepasse']); + } + // bon mot de passe - //if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) - if(isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) + if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse'] + && isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) { - // enregistrement + // enregistrement et confirmation hashNewPassword($_POST["nouveauMotdepasse"]); - - // confirmation - echo($message); - //exit(); - - /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp'); - exit();*/ + echo($message); } - // mauvais mot de passe elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) { // défense aux attaques par force brute // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site - echo($erreurMDP); + echo($errorPassword); sleep(1); echo($formulaireModifMDP); } - + // erreur de conformité + elseif(isset($newPassword) && $newPassword !== $_POST['nouveauMotdepasse']) + { + echo($errorBadCharacters); + echo($formulaireModifMDP); + } // première arrivée sur la page else { @@ -146,7 +171,7 @@ function changePassword() // hachage -function hashNewPassword($newPassword) +function hashNewPassword(string $newPassword) { // "réparation" des espaces accidentels $newPassword= trim($newPassword); @@ -160,7 +185,7 @@ function hashNewPassword($newPassword) chmod('data/password.txt', 0600); } -function testPassword($password) +function testPassword(string $password): bool { // lecture $oldHashedPassword = file_get_contents('data/password.txt'); -- cgit v1.2.3