From 8681ecc6f83507861899a8bcae21850dfc5e61d2 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 26 Jul 2022 01:47:53 +0200 Subject: captcha --- controller/Security.php | 3 +- controller/installation.php | 2 +- controller/password.php | 148 ++++++++++++++++++++++++++++++++------------ controller/visitor.php | 1 + 4 files changed, 114 insertions(+), 40 deletions(-) (limited to 'controller') diff --git a/controller/Security.php b/controller/Security.php index ac1149e..c4724de 100644 --- a/controller/Security.php +++ b/controller/Security.php @@ -39,7 +39,8 @@ function fixLinks($data) // regex pour détecter les balises et ajouter http:// au début des liens si nécessaire $pattern = '#()#'; $remplacement = '$1http://$2$3'; - // le "while" est ici parce que preg_replace s'arrête après avec trouvé et modifié un pattern, pourquoi?? + // le "while" est ici parce que preg_replace s'arrête après avec matché une fois + // plus exactement, le .* à la fin fait que la chaine détectée va jusqu'à la fin des données (à corriger peut-être avec ) while(preg_match($pattern, $data)) { $data = preg_replace($pattern, $remplacement, $data); diff --git a/controller/installation.php b/controller/installation.php index e99a06e..5aa5ac9 100644 --- a/controller/installation.php +++ b/controller/installation.php @@ -117,7 +117,7 @@ function installation() } // création d'un mot de passe si password.txt est vide - createPassword(); + existPassword(); } function createIndexPHP($path, $droitsFichiers) diff --git a/controller/password.php b/controller/password.php index e739363..e01e4dd 100644 --- a/controller/password.php +++ b/controller/password.php @@ -1,8 +1,8 @@ 'deux', + 3 => 'trois', + 4 => 'quatre', + 5 => 'cinq', + 6 => 'six', + 7 => 'sept', + 8 => 'huit', + 9 => 'neuf', + 10 => 'dix', + }; +} - // au rechargement après saisi +// 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 - 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']); - } + 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'); } - // 1ère fois + // mot de passe non valable else { - $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'); - + sleep(1); echo($header); - echo($errorBadCharacters); + echo($errorPassword); echo($formulaireNouveauMDP); - echo($warning); + echo($errorBadCharacters); } - exit(); } + // 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 @@ -72,6 +132,7 @@ function connect() } // 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"; @@ -82,20 +143,29 @@ function connect() echo($header); - // bon mot de passe - if(isset ($_POST["motdepasse"]) AND testPassword($_POST["motdepasse"])) + // 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 mot de passe - elseif(isset ($_POST["motdepasse"]) AND !testPassword($_POST["motdepasse"])) + // 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($erreurMDP); + echo($errorPassword); sleep(1); echo($formulaireConnexion); } @@ -106,6 +176,10 @@ function connect() echo($formulaireConnexion); } + // fois suivante (dispense de nettoyer la variable) + $_SESSION['captcha'] = $captcha[2]; + + echo($messageDeconnect); echo($footer); } @@ -119,8 +193,6 @@ function changePassword() exit(); } - // Ajouter une sécurité par cpatcha avec un "input" supplémentaire - // Et créer une variable de session pour la réponse au CAPTCHA $title = "Nouveau mot de passe"; $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; @@ -137,14 +209,14 @@ function changePassword() // bon mot de passe if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse'] - && isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) + && isset ($_POST["ancienMotdepasse"]) && testPassword($_POST["ancienMotdepasse"])) { // enregistrement et confirmation hashNewPassword($_POST["nouveauMotdepasse"]); echo($message); } // mauvais mot de passe - elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) + 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 @@ -164,7 +236,7 @@ function changePassword() echo($formulaireModifMDP); } - echo($warning); + //echo($warning); echo($footer); } diff --git a/controller/visitor.php b/controller/visitor.php index c561097..e0cd7fc 100644 --- a/controller/visitor.php +++ b/controller/visitor.php @@ -33,6 +33,7 @@ function pageArticlesSimplesVisitor(string $page, string $title, string $headerP // données dans $Articles->fileList['content'] $Articles->readAll(); $Articles->fileList = array_reverse($Articles->fileList); + //var_dump($Articles->fileList[0]); } // Assemblage -- cgit v1.2.3