summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-08-03 02:15:04 +0200
committerpolo <ordipolo@gmx.fr>2022-08-03 02:15:04 +0200
commite4a74650a36bbb72285d38d96ee2a0689031521e (patch)
treefb08e0c3f1b72f3372598ce1ad535d382f6f5fc7 /controller
parent498ffeb0d502bbf1dbe70f0ae7a81c11b78af37d (diff)
downloadmelaine-e4a74650a36bbb72285d38d96ee2a0689031521e.zip
captcha + améliorations regex + erreur 404
Diffstat (limited to 'controller')
-rw-r--r--controller/Security.php29
-rw-r--r--controller/password.php49
2 files changed, 56 insertions, 22 deletions
diff --git a/controller/Security.php b/controller/Security.php
index c4724de..39205c1 100644
--- a/controller/Security.php
+++ b/controller/Security.php
@@ -32,22 +32,27 @@ function removeSpacesTabsCRLF(string $chaine): string
32// lien sans http:// 32// lien sans http://
33function fixLinks($data) 33function fixLinks($data)
34{ 34{
35 // 1/
35 // si une adresse est de type "domaine.fr" sans le http:// devant, le comportement des navigateurs est de rechercher un fichier comme si mon adresse commençait par file:// 36 // si une adresse est de type "domaine.fr" sans le http:// devant, le comportement des navigateurs est de rechercher un fichier comme si mon adresse commençait par file://
36 // tomber ainsi sur une page d'erreur est parfaitement déroutant 37 // tomber ainsi sur une page d'erreur est parfaitement déroutant
37 // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème
38 38
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 //$data = preg_replace($pattern, '$1http://$2', $data);
42 // le "while" est ici parce que preg_replace s'arrête après avec matché une fois 42
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 // 2/
44 while(preg_match($pattern, $data)) 44 // cas où la regex fait mal son boulot:
45 { 45 // l'erreur 404 est gérée par le .htaccess
46 $data = preg_replace($pattern, $remplacement, $data); 46 // et le visiteur est redirigé à la page "menu"
47 } 47 // (ça ne règle pas le problème mais c'est mieux)
48 48
49 // 2ème problème, en train d'écrire un article, l'utilisateur clique sur ce lien qu'il vient de créer et qui apparaît dans l'infobulle, un nouvelle onglet apparaît 49 // 3/
50 // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 50 // quand l'éditeur est ouvert (avant de valider l'article),
51 // le lien qu'on vient de créer apparaît dans l'infobulle,
52 // cliquer dessus ouvre un onglet sur une erreur 404
53 // solution partielle avec le .htaccess
54 //
55 // solution? fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
51 // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière? 56 // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière?
52 57
53 return($data); 58 return($data);
diff --git a/controller/password.php b/controller/password.php
index a163619..9d9b45b 100644
--- a/controller/password.php
+++ b/controller/password.php
@@ -28,8 +28,8 @@ function existPassword()
28 28
29function createCaptcha(): array 29function createCaptcha(): array
30{ 30{
31 $a = rand(2, 10); 31 $a = rand(2, 9);
32 $b = rand(2, 10); 32 $b = rand(2, 9);
33 return array(toLettersFrench($a), toLettersFrench($b), $a * $b); 33 return array(toLettersFrench($a), toLettersFrench($b), $a * $b);
34} 34}
35 35
@@ -61,16 +61,30 @@ function toLettersFrench(int $number): string
61 case 9: 61 case 9:
62 return 'neuf'; 62 return 'neuf';
63 break; 63 break;
64 case 10: 64 default:
65 return 'dix'; 65 return ''; // erreur
66 break;
67 }; 66 };
68} 67}
69 68
70// vérifier qu'on a que des chiffres 69// on veut des chiffres
71function controlCaptchaInput() 70function controlCaptchaInput(): int
72{ 71{
73 //$_POST['captcha'] 72 if(is_numeric($_POST['captcha'])) // '2.3' est acceptés
73 {
74 // (int) supprime les décimales
75 if($_POST['captcha'] == (int) $_POST['captcha'])
76 {
77 return (int) $_POST['captcha'];
78 }
79 else
80 {
81 return 0;
82 }
83 }
84 else
85 {
86 return 0;
87 }
74} 88}
75 89
76 90
@@ -90,7 +104,7 @@ function createPassword()
90 $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.'; 104 $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.';
91 require('view/password.php'); 105 require('view/password.php');
92 106
93 // au rechargement après saisi 107 // contrôle de la saisie
94 if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha']) 108 if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha'])
95 { 109 {
96 // caractères non désirés supprimés 110 // caractères non désirés supprimés
@@ -116,6 +130,15 @@ function createPassword()
116 echo($errorBadCharacters); 130 echo($errorBadCharacters);
117 } 131 }
118 } 132 }
133 // saisie non valide
134 elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0)
135 {
136 sleep(1);
137 echo($header);
138 echo($errorNonValidCaptcha);
139 echo($formulaireNouveauMDP);
140 echo($errorBadCharacters);
141 }
119 // mauvais captcha 142 // mauvais captcha
120 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) 143 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha'])
121 { 144 {
@@ -169,7 +192,13 @@ function connect()
169 header('Location: index.php?page=' . $_GET['from']); 192 header('Location: index.php?page=' . $_GET['from']);
170 exit(); 193 exit();
171 } 194 }
172 195 // saisie non valide
196 elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0)
197 {
198 echo($errorNonValidCaptcha);
199 sleep(1);
200 echo($formulaireConnexion);
201 }
173 // mauvais captcha 202 // mauvais captcha
174 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) 203 elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha'])
175 { 204 {