diff options
author | polo <ordipolo@gmx.fr> | 2022-08-03 02:15:04 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2022-08-03 02:15:04 +0200 |
commit | e4a74650a36bbb72285d38d96ee2a0689031521e (patch) | |
tree | fb08e0c3f1b72f3372598ce1ad535d382f6f5fc7 /controller | |
parent | 498ffeb0d502bbf1dbe70f0ae7a81c11b78af37d (diff) | |
download | melaine-e4a74650a36bbb72285d38d96ee2a0689031521e.zip |
captcha + améliorations regex + erreur 404
Diffstat (limited to 'controller')
-rw-r--r-- | controller/Security.php | 29 | ||||
-rw-r--r-- | controller/password.php | 49 |
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:// |
33 | function fixLinks($data) | 33 | function 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 | ||
29 | function createCaptcha(): array | 29 | function 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 |
71 | function controlCaptchaInput() | 70 | function 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 | { |