summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-07-26 01:47:53 +0200
committerpolo <ordipolo@gmx.fr>2022-07-26 01:47:53 +0200
commit8681ecc6f83507861899a8bcae21850dfc5e61d2 (patch)
tree4414dafb2be493125b57437af07041ca2814b7b1 /controller
parent251a6926a1a09e4cc9da1b4f91be7c3a8283bf3f (diff)
downloadmelaine-8681ecc6f83507861899a8bcae21850dfc5e61d2.zip
captcha
Diffstat (limited to 'controller')
-rw-r--r--controller/Security.php3
-rw-r--r--controller/installation.php2
-rw-r--r--controller/password.php148
-rw-r--r--controller/visitor.php1
4 files changed, 114 insertions, 40 deletions
diff --git a/controller/Security.php b/controller/Security.php
index ac1149e..c4724de 100644
--- a/controller/Security.php
+++ b/controller/Security.php
@@ -39,7 +39,8 @@ function fixLinks($data)
39 // regex pour détecter les balises <a> et ajouter http:// au début des liens si nécessaire 39 // regex pour détecter les balises <a> et ajouter http:// au début des liens si nécessaire
40 $pattern = '#(<a.*href=")((?!https?://).*)(".*>)#'; 40 $pattern = '#(<a.*href=")((?!https?://).*)(".*>)#';
41 $remplacement = '$1http://$2$3'; 41 $remplacement = '$1http://$2$3';
42 // le "while" est ici parce que preg_replace s'arrête après avec trouvé et modifié un pattern, pourquoi?? 42 // le "while" est ici parce que preg_replace s'arrête après avec matché une fois
43 // plus exactement, le .* à la fin fait que la chaine détectée va jusqu'à la fin des données (à corriger peut-être avec </a>)
43 while(preg_match($pattern, $data)) 44 while(preg_match($pattern, $data))
44 { 45 {
45 $data = preg_replace($pattern, $remplacement, $data); 46 $data = preg_replace($pattern, $remplacement, $data);
diff --git a/controller/installation.php b/controller/installation.php
index e99a06e..5aa5ac9 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -117,7 +117,7 @@ function installation()
117 } 117 }
118 118
119 // création d'un mot de passe si password.txt est vide 119 // création d'un mot de passe si password.txt est vide
120 createPassword(); 120 existPassword();
121} 121}
122 122
123function createIndexPHP($path, $droitsFichiers) 123function createIndexPHP($path, $droitsFichiers)
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
diff --git a/controller/visitor.php b/controller/visitor.php
index c561097..e0cd7fc 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -33,6 +33,7 @@ function pageArticlesSimplesVisitor(string $page, string $title, string $headerP
33 // données dans $Articles->fileList['content'] 33 // données dans $Articles->fileList['content']
34 $Articles->readAll(); 34 $Articles->readAll();
35 $Articles->fileList = array_reverse($Articles->fileList); 35 $Articles->fileList = array_reverse($Articles->fileList);
36 //var_dump($Articles->fileList[0]);
36 } 37 }
37 38
38 // Assemblage 39 // Assemblage