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/password.php | |
| parent | 84cb077b39d990c240976a6b20024c89c903ba91 (diff) | |
| download | melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.tar.gz melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.tar.bz2 melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.zip | |
password
Diffstat (limited to 'controller/password.php')
| -rw-r--r-- | controller/password.php | 178 |
1 files changed, 171 insertions, 7 deletions
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 |
