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.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 | } | ||