diff options
| author | polo <ordipolo@gmx.fr> | 2021-08-18 10:45:26 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2021-08-18 10:45:26 +0200 |
| commit | 452420d0cd05822a9974fe27f0edc4cc4dc300cc (patch) | |
| tree | b9f3e14e598080f54bf5ab4ee0657ba3624908aa /controller | |
| parent | 84cb077b39d990c240976a6b20024c89c903ba91 (diff) | |
| download | melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.tar.gz melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.tar.bz2 melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.zip | |
password
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/admin.php | 52 | ||||
| -rw-r--r-- | controller/installation.php | 14 | ||||
| -rw-r--r-- | controller/password.php | 178 | ||||
| -rw-r--r-- | controller/visitor.php | 51 |
4 files changed, 185 insertions, 110 deletions
diff --git a/controller/admin.php b/controller/admin.php index 29ccd41..0abdb1c 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
| @@ -90,55 +90,3 @@ function discoEdit($numArticle, $suppression) | |||
| 90 | // fin de l'assemblage | 90 | // fin de l'assemblage |
| 91 | require('view/template.php'); | 91 | require('view/template.php'); |
| 92 | } | 92 | } |
| 93 | |||
| 94 | function changerMotDePasse($secret) | ||
| 95 | { | ||
| 96 | // vérification supplémentaire | ||
| 97 | if($_SESSION['admin'] !== 1) | ||
| 98 | { | ||
| 99 | $_SESSION['admin'] = 0; | ||
| 100 | header('Location: index.php?page=' . $_GET['from']); | ||
| 101 | exit(); | ||
| 102 | } | ||
| 103 | |||
| 104 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
| 105 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
| 106 | |||
| 107 | $title = "nouveau mot de passe"; | ||
| 108 | $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; | ||
| 109 | |||
| 110 | // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php | ||
| 111 | require('view/connexion.php'); | ||
| 112 | |||
| 113 | echo($header); | ||
| 114 | |||
| 115 | // traitements: vérification ancien mot de passe et choix du nouveau | ||
| 116 | // bon mot de passe | ||
| 117 | if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) | ||
| 118 | { | ||
| 119 | // confirmation | ||
| 120 | echo($message); | ||
| 121 | //exit(); | ||
| 122 | |||
| 123 | /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp'); | ||
| 124 | exit();*/ | ||
| 125 | } | ||
| 126 | |||
| 127 | // mauvais mot de passe | ||
| 128 | elseif(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] != $secret) | ||
| 129 | { | ||
| 130 | // défense aux attaques par force brute | ||
| 131 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
| 132 | echo($erreurMDP); | ||
| 133 | sleep(1); | ||
| 134 | echo($formulaireNouveauMDP); | ||
| 135 | } | ||
| 136 | |||
| 137 | // première arrivée sur la page | ||
| 138 | else | ||
| 139 | { | ||
| 140 | echo($formulaireNouveauMDP); | ||
| 141 | } | ||
| 142 | |||
| 143 | echo($footer); | ||
| 144 | } | ||
diff --git a/controller/installation.php b/controller/installation.php index e7136a5..42212f5 100644 --- a/controller/installation.php +++ b/controller/installation.php | |||
| @@ -49,7 +49,7 @@ function installation() | |||
| 49 | // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant | 49 | // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant |
| 50 | 50 | ||
| 51 | // le 0 devant signifie que le nombre est en octal | 51 | // le 0 devant signifie que le nombre est en octal |
| 52 | // on pourra changer cette valeur à la mise en production du site si le script d'upload des données est bon | 52 | // changer cette valeur à la mise en production du site si le script d'upload des données est bon |
| 53 | $droitsDossiers = 0777; | 53 | $droitsDossiers = 0777; |
| 54 | 54 | ||
| 55 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); | 55 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); |
| @@ -82,5 +82,15 @@ function installation() | |||
| 82 | mkdir('data/discographie/json'); | 82 | mkdir('data/discographie/json'); |
| 83 | chmod('data/discographie/json', $droitsDossiers); | 83 | chmod('data/discographie/json', $droitsDossiers); |
| 84 | } | 84 | } |
| 85 | // donner les droits 666 aux fichiers à l'intérieur | 85 | // fichier password.txt |
| 86 | if(!file_exists('data/password.txt')) | ||
| 87 | { | ||
| 88 | touch('data/password.txt'); | ||
| 89 | chmod('data/password.txt', 0600); | ||
| 90 | } | ||
| 91 | |||
| 92 | // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers | ||
| 93 | |||
| 94 | // création d'un mot de passe si password.txt est vide | ||
| 95 | createPassword(); | ||
| 86 | } | 96 | } |
diff --git a/controller/password.php b/controller/password.php index 987670f..4ca9f4f 100644 --- a/controller/password.php +++ b/controller/password.php | |||
| @@ -1,16 +1,180 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // password.php | 2 | // password.php |
| 3 | 3 | ||
| 4 | function hashNewPassword() | 4 | |
| 5 | // affichage | ||
| 6 | function createPassword() | ||
| 5 | { | 7 | { |
| 6 | //$hash = password_hash($password, PASSWORD_DEFAULT); | 8 | // si installation() vient de créer un fichier vide |
| 9 | $hashedPassword = trim(file_get_contents('data/password.txt')); | ||
| 10 | if(empty($hashedPassword)) | ||
| 11 | { | ||
| 12 | // paranoïa | ||
| 13 | if(isset($_SESSION['admin'])) | ||
| 14 | { | ||
| 15 | unset($_SESSION['admin']); | ||
| 16 | header("Location: index.php"); | ||
| 17 | exit(); | ||
| 18 | } | ||
| 19 | |||
| 20 | // au rechargement: un mot de passe a été saisi | ||
| 21 | // les espaces/tabulations sont considérés commes des erreurs | ||
| 22 | if(isset($_POST['motdepasse']) && !empty(trim($_POST['motdepasse']))) | ||
| 23 | { | ||
| 24 | // enregistrement | ||
| 25 | hashNewPassword($_POST['motdepasse']); | ||
| 26 | header('Location: index.php'); | ||
| 27 | } | ||
| 28 | // 1ère fois | ||
| 29 | else | ||
| 30 | { | ||
| 31 | $title = "Créer un mot de passe"; | ||
| 32 | $subHeading = "Veuillez choisir le mot de passe que vous utiliserez pour gérer le site."; | ||
| 33 | |||
| 34 | require('view/password.php'); | ||
| 7 | 35 | ||
| 8 | // écrire dans un fichier | 36 | echo($header); |
| 37 | echo($formulaireNouveauMDP); | ||
| 38 | echo($warning); | ||
| 39 | } | ||
| 40 | exit(); | ||
| 41 | } | ||
| 9 | } | 42 | } |
| 10 | 43 | ||
| 11 | function testPassword() | 44 | function connect() |
| 12 | { | 45 | { |
| 13 | // lire dans un fichier | 46 | // déjà en mode admin |
| 14 | 47 | if($_SESSION['admin'] == 1) | |
| 15 | //if(password_verify($password, $hash)) | 48 | { |
| 49 | header('Location: index.php?page=' . $_GET['from']); | ||
| 50 | exit(); | ||
| 51 | } | ||
| 52 | |||
| 53 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
| 54 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
| 55 | |||
| 56 | $title = "Connexion"; | ||
| 57 | $subHeading = "Veuillez saisir votre mot de passe pour pouvoir apporter des modifications au site."; | ||
| 58 | |||
| 59 | // cette page utilise la même vue que la fonction changerMotDePasse() dans controller/admin.php | ||
| 60 | require('view/password.php'); | ||
| 61 | |||
| 62 | echo($header); | ||
| 63 | |||
| 64 | // bon mot de passe | ||
| 65 | if(isset ($_POST["motdepasse"]) AND testPassword($_POST["motdepasse"])) | ||
| 66 | { | ||
| 67 | $_SESSION['admin'] = 1; | ||
| 68 | header('Location: index.php?page=' . $_GET['from']); | ||
| 69 | exit(); | ||
| 70 | } | ||
| 71 | |||
| 72 | // mauvais mot de passe | ||
| 73 | elseif(isset ($_POST["motdepasse"]) AND !testPassword($_POST["motdepasse"])) | ||
| 74 | { | ||
| 75 | // défense aux attaques par force brute | ||
| 76 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
| 77 | echo($erreurMDP); | ||
| 78 | sleep(1); | ||
| 79 | echo($formulaireConnexion); | ||
| 80 | } | ||
| 81 | |||
| 82 | // première arrivée sur la page | ||
| 83 | else | ||
| 84 | { | ||
| 85 | echo($formulaireConnexion); | ||
| 86 | } | ||
| 87 | |||
| 88 | echo($footer); | ||
| 89 | } | ||
| 90 | |||
| 91 | function changePassword() | ||
| 92 | { | ||
| 93 | // vérification supplémentaire | ||
| 94 | if($_SESSION['admin'] !== 1) | ||
| 95 | { | ||
| 96 | $_SESSION['admin'] = 0; | ||
| 97 | header('Location: index.php?page=' . $_GET['from']); | ||
| 98 | exit(); | ||
| 99 | } | ||
| 100 | |||
| 101 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
| 102 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
| 103 | $title = "Nouveau mot de passe"; | ||
| 104 | $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; | ||
| 105 | |||
| 106 | // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php | ||
| 107 | require('view/password.php'); | ||
| 108 | |||
| 109 | echo($header); | ||
| 110 | |||
| 111 | // traitements: vérification ancien mot de passe et choix du nouveau | ||
| 112 | // bon mot de passe | ||
| 113 | //if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) | ||
| 114 | if(isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) | ||
| 115 | { | ||
| 116 | // enregistrement | ||
| 117 | hashNewPassword($_POST["nouveauMotdepasse"]); | ||
| 118 | |||
| 119 | // confirmation | ||
| 120 | echo($message); | ||
| 121 | //exit(); | ||
| 122 | |||
| 123 | /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp'); | ||
| 124 | exit();*/ | ||
| 125 | } | ||
| 126 | |||
| 127 | // mauvais mot de passe | ||
| 128 | elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) | ||
| 129 | { | ||
| 130 | // défense aux attaques par force brute | ||
| 131 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
| 132 | echo($erreurMDP); | ||
| 133 | sleep(1); | ||
| 134 | echo($formulaireModifMDP); | ||
| 135 | } | ||
| 136 | |||
| 137 | // première arrivée sur la page | ||
| 138 | else | ||
| 139 | { | ||
| 140 | echo($formulaireModifMDP); | ||
| 141 | } | ||
| 142 | |||
| 143 | echo($warning); | ||
| 144 | echo($footer); | ||
| 145 | } | ||
| 146 | |||
| 147 | |||
| 148 | // hachage | ||
| 149 | function hashNewPassword($newPassword) | ||
| 150 | { | ||
| 151 | // "réparation" des espaces accidentels | ||
| 152 | $newPassword= trim($newPassword); | ||
| 153 | // hachage | ||
| 154 | $newHashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); | ||
| 155 | |||
| 156 | // écriture | ||
| 157 | $file = fopen('data/password.txt', 'w'); | ||
| 158 | fputs($file, $newHashedPassword); | ||
| 159 | fclose($file); | ||
| 160 | chmod('data/password.txt', 0600); | ||
| 161 | } | ||
| 162 | |||
| 163 | function testPassword($password) | ||
| 164 | { | ||
| 165 | // lecture | ||
| 166 | $oldHashedPassword = file_get_contents('data/password.txt'); | ||
| 167 | |||
| 168 | // "réparation" des espaces accidentels | ||
| 169 | $password= trim($password); | ||
| 170 | $oldHashedPassword = trim($oldHashedPassword); | ||
| 171 | |||
| 172 | if(password_verify($password, $oldHashedPassword)) | ||
| 173 | { | ||
| 174 | return true; | ||
| 175 | } | ||
| 176 | else | ||
| 177 | { | ||
| 178 | return false; | ||
| 179 | } | ||
| 16 | } \ No newline at end of file | 180 | } \ No newline at end of file |
diff --git a/controller/visitor.php b/controller/visitor.php index 539df1f..4f51dda 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
| @@ -37,7 +37,7 @@ function melaineVisitor() | |||
| 37 | $Articles->setPage($page_actuelle); | 37 | $Articles->setPage($page_actuelle); |
| 38 | $Articles->getFiles(); | 38 | $Articles->getFiles(); |
| 39 | $Articles->reverseFilesArray(); | 39 | $Articles->reverseFilesArray(); |
| 40 | $articles = $Articles->getAll(); | 40 | $articles = $Articles->getAll(); // lourd |
| 41 | 41 | ||
| 42 | // vérification pour protéger les visiteurs | 42 | // vérification pour protéger les visiteurs |
| 43 | // normalement déjà faite dans submit.php, au cas où la base a été trafiquée | 43 | // normalement déjà faite dans submit.php, au cas où la base a été trafiquée |
| @@ -79,51 +79,4 @@ function peinture() | |||
| 79 | {} | 79 | {} |
| 80 | 80 | ||
| 81 | function archives() | 81 | function archives() |
| 82 | {} | 82 | {} \ No newline at end of file |
| 83 | |||
| 84 | function connexion($secret) | ||
| 85 | { | ||
| 86 | // déjà en mode admin | ||
| 87 | if($_SESSION['admin'] == 1) | ||
| 88 | { | ||
| 89 | header('Location: index.php?page=' . $_GET['from']); | ||
| 90 | exit(); | ||
| 91 | } | ||
| 92 | |||
| 93 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
| 94 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
| 95 | |||
| 96 | $title = "connexion"; | ||
| 97 | $subHeading = "Veuillez saisir votre mot de passe pour pouvoir apporter des modifications au site."; | ||
| 98 | |||
| 99 | // cette page utilise la même vue que la fonction changerMotDePasse() dans controller/admin.php | ||
| 100 | require('view/connexion.php'); | ||
| 101 | |||
| 102 | echo($header); | ||
| 103 | |||
| 104 | // bon mot de passe | ||
| 105 | if(isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] == $secret) | ||
| 106 | { | ||
| 107 | $_SESSION['admin'] = 1; | ||
| 108 | header('Location: index.php?page=' . $_GET['from']); | ||
| 109 | exit(); | ||
| 110 | } | ||
| 111 | |||
| 112 | // mauvais mot de passe | ||
| 113 | elseif(isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] != $secret) | ||
| 114 | { | ||
| 115 | // défense aux attaques par force brute | ||
| 116 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
| 117 | echo($erreurMDP); | ||
| 118 | sleep(1); | ||
| 119 | echo($formulaireConnexion); | ||
| 120 | } | ||
| 121 | |||
| 122 | // première arrivée sur la page | ||
| 123 | else | ||
| 124 | { | ||
| 125 | echo($formulaireConnexion); | ||
| 126 | } | ||
| 127 | |||
| 128 | echo($footer); | ||
| 129 | } | ||
