summaryrefslogtreecommitdiff
path: root/controller/password.php
diff options
context:
space:
mode:
Diffstat (limited to 'controller/password.php')
-rw-r--r--controller/password.php148
1 files changed, 110 insertions, 38 deletions
diff --git a/controller/password.php b/controller/password.php
index e739363..e01e4dd 100644
--- a/controller/password.php
+++ b/controller/password.php
@@ -1,8 +1,8 @@
1<?php 1<?php
2// controller/password.php 2// controller/password.php
3 3
4// affichage 4// fonction exécutée à l'ouverture de chaque page
5function createPassword() 5function existPassword()
6{ 6{
7 // création du fichier 7 // création du fichier
8 if(!file_exists('data/password.txt')) 8 if(!file_exists('data/password.txt'))
@@ -18,50 +18,110 @@ function createPassword()
18 echo('Erreur: ouverture du fichier password.txt impossible.'); 18 echo('Erreur: ouverture du fichier password.txt impossible.');
19 exit(); 19 exit();
20 } 20 }
21 21
22 // création du mot de passe
23 if(empty($hashedPassword)) 22 if(empty($hashedPassword))
24 { 23 {
25 // paranoïa? 24 createPassword();
26 if(isset($_SESSION['admin'])) 25 }
27 { 26}
28 unset($_SESSION['admin']); 27
29 header("Location: index.php"); 28
30 exit(); 29function createCaptcha(): array
31 } 30{
31 $a = rand(2, 10);
32 $b = rand(2, 10);
33 return array(toLettersFrench($a), toLettersFrench($b), $a * $b);
34}
35
36function toLettersFrench(int $number): string
37{
38 return match($number)
39 {
40 2 => 'deux',
41 3 => 'trois',
42 4 => 'quatre',
43 5 => 'cinq',
44 6 => 'six',
45 7 => 'sept',
46 8 => 'huit',
47 9 => 'neuf',
48 10 => 'dix',
49 };
50}
32 51
33 // au rechargement après saisi 52// vérifier qu'on a que des chiffres
53function controlCaptchaInput()
54{
55 //$_POST['captcha']
56}
57
58
59function createPassword()
60{
61 // paranoïa?
62 if(isset($_SESSION['admin']))
63 {
64 unset($_SESSION['admin']);
65 header("Location: index.php");
66 exit();
67 }
68
69 $captcha = createCaptcha();
70 require('view/password.php');
71
72 $title = 'Bienvenue Melaine Favennec';
73 $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.';
74
75 // au rechargement après saisi
76 if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha'])
77 {
78 // caractères non désirés supprimés
34 // impossible d'entrer un espace ou une tabulation et de valider par erreur 79 // impossible d'entrer un espace ou une tabulation et de valider par erreur
35 if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse'])) 80 require('controller/Security.php');
36 { 81 $password = Security::secureString($_POST['motdepasse']);
37 // caractères non désirés supprimés 82 $password = removeSpacesTabsCRLF($_POST['motdepasse']);
38 require('controller/Security.php'); 83
39 $password = Security::secureString($_POST['motdepasse']);
40 $password = removeSpacesTabsCRLF($_POST['motdepasse']);
41 }
42 // enregistrement 84 // enregistrement
43 if(isset($password) && $password == $_POST['motdepasse']) 85 if(isset($password) && $password == $_POST['motdepasse'])
44 { 86 {
45 hashNewPassword($_POST['motdepasse']); 87 hashNewPassword($_POST['motdepasse']);
88 unset($_SESSION['captcha']); // nettoyage
46 header('Location: index.php'); 89 header('Location: index.php');
47 } 90 }
48 // 1ère fois 91 // mot de passe non valable
49 else 92 else
50 { 93 {
51 $title = 'Créer un mot de passe'; 94 sleep(1);
52 $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.';
53
54 require('view/password.php');
55
56 echo($header); 95 echo($header);
57 echo($errorBadCharacters); 96 echo($errorPassword);
58 echo($formulaireNouveauMDP); 97 echo($formulaireNouveauMDP);
59 echo($warning); 98 echo($errorBadCharacters);
60 } 99 }
61 exit();
62 } 100 }
101 // mauvais captcha
102 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha'])
103 {
104 sleep(1);
105 echo($header);
106 echo($errorCaptcha);
107 echo($formulaireNouveauMDP);
108 echo($errorBadCharacters);
109 }
110 // 1ère fois
111 else
112 {
113 echo($header);
114 echo($formulaireNouveauMDP);
115 echo($errorBadCharacters);
116 //echo($warning); // message pas top
117 }
118
119 // fois suivante (dispense de nettoyer la variable)
120 $_SESSION['captcha'] = $captcha[2];
121 exit();
63} 122}
64 123
124
65function connect() 125function connect()
66{ 126{
67 // déjà en mode admin 127 // déjà en mode admin
@@ -72,6 +132,7 @@ function connect()
72 } 132 }
73 133
74 // Ajouter une sécurité par cpatcha avec un "input" supplémentaire 134 // Ajouter une sécurité par cpatcha avec un "input" supplémentaire
135 $captcha = createCaptcha();
75 // Et créer une variable de session pour la réponse au CAPTCHA 136 // Et créer une variable de session pour la réponse au CAPTCHA
76 137
77 $title = "Connexion"; 138 $title = "Connexion";
@@ -82,20 +143,29 @@ function connect()
82 143
83 echo($header); 144 echo($header);
84 145
85 // bon mot de passe 146 // bon codes (mot de passe et captcha)
86 if(isset ($_POST["motdepasse"]) AND testPassword($_POST["motdepasse"])) 147 if(isset ($_POST["motdepasse"]) && testPassword($_POST["motdepasse"]) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha'])
87 { 148 {
88 $_SESSION['admin'] = 1; 149 $_SESSION['admin'] = 1;
150 unset($_SESSION['captcha']); // nettoyage
89 header('Location: index.php?page=' . $_GET['from']); 151 header('Location: index.php?page=' . $_GET['from']);
90 exit(); 152 exit();
91 } 153 }
92 154
93 // mauvais mot de passe 155 // mauvais captcha
94 elseif(isset ($_POST["motdepasse"]) AND !testPassword($_POST["motdepasse"])) 156 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha'])
157 {
158 echo($errorCaptcha);
159 sleep(1);
160 echo($formulaireConnexion);
161 }
162
163 // mauvais codes
164 elseif(isset ($_POST["motdepasse"]) && !testPassword($_POST["motdepasse"]))
95 { 165 {
96 // défense aux attaques par force brute 166 // défense aux attaques par force brute
97 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site 167 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site
98 echo($erreurMDP); 168 echo($errorPassword);
99 sleep(1); 169 sleep(1);
100 echo($formulaireConnexion); 170 echo($formulaireConnexion);
101 } 171 }
@@ -106,6 +176,10 @@ function connect()
106 echo($formulaireConnexion); 176 echo($formulaireConnexion);
107 } 177 }
108 178
179 // fois suivante (dispense de nettoyer la variable)
180 $_SESSION['captcha'] = $captcha[2];
181
182 echo($messageDeconnect);
109 echo($footer); 183 echo($footer);
110} 184}
111 185
@@ -119,8 +193,6 @@ function changePassword()
119 exit(); 193 exit();
120 } 194 }
121 195
122 // Ajouter une sécurité par cpatcha avec un "input" supplémentaire
123 // Et créer une variable de session pour la réponse au CAPTCHA
124 $title = "Nouveau mot de passe"; 196 $title = "Nouveau mot de passe";
125 $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; 197 $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau.";
126 198
@@ -137,14 +209,14 @@ function changePassword()
137 209
138 // bon mot de passe 210 // bon mot de passe
139 if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse'] 211 if(isset($newPassword) && $newPassword === $_POST['nouveauMotdepasse']
140 && isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) 212 && isset ($_POST["ancienMotdepasse"]) && testPassword($_POST["ancienMotdepasse"]))
141 { 213 {
142 // enregistrement et confirmation 214 // enregistrement et confirmation
143 hashNewPassword($_POST["nouveauMotdepasse"]); 215 hashNewPassword($_POST["nouveauMotdepasse"]);
144 echo($message); 216 echo($message);
145 } 217 }
146 // mauvais mot de passe 218 // mauvais mot de passe
147 elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) 219 elseif(isset ($_POST["ancienMotdepasse"]) && !testPassword($_POST["ancienMotdepasse"]))
148 { 220 {
149 // défense aux attaques par force brute 221 // défense aux attaques par force brute
150 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site 222 // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site
@@ -164,7 +236,7 @@ function changePassword()
164 echo($formulaireModifMDP); 236 echo($formulaireModifMDP);
165 } 237 }
166 238
167 echo($warning); 239 //echo($warning);
168 echo($footer); 240 echo($footer);
169} 241}
170 242