'deux', 3 => 'trois', 4 => 'quatre', 5 => 'cinq', 6 => 'six', 7 => 'sept', 8 => 'huit', 9 => 'neuf', 10 => 'dix', }; } // vérifier qu'on a que des chiffres function controlCaptchaInput() { //$_POST['captcha'] } function createPassword() { // paranoïa? if(isset($_SESSION['admin'])) { unset($_SESSION['admin']); header("Location: index.php"); exit(); } $captcha = createCaptcha(); require('view/password.php'); $title = 'Bienvenue Melaine Favennec'; $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.'; // au rechargement après saisi if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha']) { // caractères non désirés supprimés // impossible d'entrer un espace ou une tabulation et de valider par erreur require('controller/Security.php'); $password = Security::secureString($_POST['motdepasse']); $password = removeSpacesTabsCRLF($_POST['motdepasse']); // enregistrement if(isset($password) && $password == $_POST['motdepasse']) { hashNewPassword($_POST['motdepasse']); unset($_SESSION['captcha']); // nettoyage header('Location: index.php'); } // mot de passe non valable else { sleep(1); echo($header); echo($errorPassword); echo($formulaireNouveauMDP); echo($errorBadCharacters); } } // mauvais captcha elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) { 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 } // fois suivante (dispense de nettoyer la variable) $_SESSION['captcha'] = $captcha[2]; exit(); } function connect() { // déjà en mode admin if($_SESSION['admin'] == 1) { header('Location: index.php?page=' . $_GET['from']); exit(); } // Ajouter une sécurité par cpatcha avec un "input" supplémentaire $captcha = createCaptcha(); // Et créer une variable de session pour la réponse au CAPTCHA $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 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(); } // mauvais captcha elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) { echo($errorCaptcha); sleep(1); echo($formulaireConnexion); } // 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 changePassword() { // vérification supplémentaire if($_SESSION['admin'] !== 1) { $_SESSION['admin'] = 0; 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'])) { 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); } // mauvais mot de passe elseif(isset ($_POST["ancienMotdepasse"]) && !testPassword($_POST["ancienMotdepasse"])) { // 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); } // erreur de conformité elseif(isset($newPassword) && $newPassword !== $_POST['nouveauMotdepasse']) { echo($errorBadCharacters); echo($formulaireModifMDP); } // première arrivée sur la page else { echo($formulaireModifMDP); } //echo($warning); echo($footer); } // hachage function hashNewPassword(string $newPassword) { // "réparation" des espaces accidentels $newPassword= trim($newPassword); // hachage $newHashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); // écriture $file = fopen('data/password.txt', 'w'); fputs($file, $newHashedPassword); fclose($file); chmod('data/password.txt', 0600); } function testPassword(string $password): bool { // lecture $oldHashedPassword = file_get_contents('data/password.txt'); // "réparation" des espaces accidentels $password= trim($password); $oldHashedPassword = trim($oldHashedPassword); if(password_verify($password, $oldHashedPassword)) { return true; } else { return false; } }