summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-08-18 10:45:26 +0200
committerpolo <ordipolo@gmx.fr>2021-08-18 10:45:26 +0200
commit452420d0cd05822a9974fe27f0edc4cc4dc300cc (patch)
treeb9f3e14e598080f54bf5ab4ee0657ba3624908aa /controller
parent84cb077b39d990c240976a6b20024c89c903ba91 (diff)
downloadmelaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.zip
password
Diffstat (limited to 'controller')
-rw-r--r--controller/admin.php52
-rw-r--r--controller/installation.php14
-rw-r--r--controller/password.php178
-rw-r--r--controller/visitor.php51
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
94function 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
4function hashNewPassword() 4
5// affichage
6function 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
11function testPassword() 44function 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
91function 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
149function 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
163function 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
81function archives() 81function archives()
82{} 82{} \ No newline at end of file
83
84function 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}