diff options
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 |