From e4a74650a36bbb72285d38d96ee2a0689031521e Mon Sep 17 00:00:00 2001 From: polo Date: Wed, 3 Aug 2022 02:15:04 +0200 Subject: =?UTF-8?q?captcha=20+=20am=C3=A9liorations=20regex=20+=20erreur?= =?UTF-8?q?=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 7 +++-- controller/Security.php | 29 ++++++++++------- controller/password.php | 49 +++++++++++++++++++++++------ erreur404.php | 6 ++++ model/Article.php | 13 ++++---- public/css/donnees_hors_editeur.css | 2 +- view/password.php | 1 + "\303\240 faire apr\303\250s livraison.txt" | 4 +-- 8 files changed, 77 insertions(+), 34 deletions(-) diff --git a/.htaccess b/.htaccess index aaae3a8..c9390b5 100644 --- a/.htaccess +++ b/.htaccess @@ -2,7 +2,10 @@ # ne décocher qu'une seule ligne "ErrorDocument" # site simple -#ErrorDocument 404 http://localhost/melaine/erreur404.php +#ErrorDocument 404 /melaine/erreur404.php -# site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut) +# site "hôte virtuel" local: melaine.localhost ErrorDocument 404 /erreur404.php + +# en utilisant une adresse distante (http) +#ErrorDocument 404 http://melainefavennec.com/erreur404.php 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 // lien sans http:// function fixLinks($data) { + // 1/ // 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:// // tomber ainsi sur une page d'erreur est parfaitement déroutant - // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème // regex pour détecter les balises et ajouter http:// au début des liens si nécessaire - $pattern = '#()#'; - $remplacement = '$1http://$2$3'; - // le "while" est ici parce que preg_replace s'arrête après avec matché une fois - // plus exactement, le .* à la fin fait que la chaine détectée va jusqu'à la fin des données (à corriger peut-être avec ) - while(preg_match($pattern, $data)) - { - $data = preg_replace($pattern, $remplacement, $data); - } - - // 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 - // solution: fermer ce nouvel onglet avec echo ''; + $pattern = '#(]+href=")((?!https?://)[^>]+>)#'; + //$data = preg_replace($pattern, '$1http://$2', $data); + + // 2/ + // cas où la regex fait mal son boulot: + // l'erreur 404 est gérée par le .htaccess + // et le visiteur est redirigé à la page "menu" + // (ça ne règle pas le problème mais c'est mieux) + + // 3/ + // quand l'éditeur est ouvert (avant de valider l'article), + // le lien qu'on vient de créer apparaît dans l'infobulle, + // cliquer dessus ouvre un onglet sur une erreur 404 + // solution partielle avec le .htaccess + // + // solution? fermer ce nouvel onglet avec echo ''; // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière? 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() function createCaptcha(): array { - $a = rand(2, 10); - $b = rand(2, 10); + $a = rand(2, 9); + $b = rand(2, 9); return array(toLettersFrench($a), toLettersFrench($b), $a * $b); } @@ -61,16 +61,30 @@ function toLettersFrench(int $number): string case 9: return 'neuf'; break; - case 10: - return 'dix'; - break; + default: + return ''; // erreur }; } -// vérifier qu'on a que des chiffres -function controlCaptchaInput() +// on veut des chiffres +function controlCaptchaInput(): int { - //$_POST['captcha'] + if(is_numeric($_POST['captcha'])) // '2.3' est acceptés + { + // (int) supprime les décimales + if($_POST['captcha'] == (int) $_POST['captcha']) + { + return (int) $_POST['captcha']; + } + else + { + return 0; + } + } + else + { + return 0; + } } @@ -90,7 +104,7 @@ function createPassword() $subHeading = 'Veuillez choisir le mot de passe que vous utiliserez pour gérer le site.'; require('view/password.php'); - // au rechargement après saisi + // contrôle de la saisie if(isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['captcha']) && (int) $_POST['captcha'] == $_SESSION['captcha']) { // caractères non désirés supprimés @@ -116,6 +130,15 @@ function createPassword() echo($errorBadCharacters); } } + // saisie non valide + elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0) + { + sleep(1); + echo($header); + echo($errorNonValidCaptcha); + echo($formulaireNouveauMDP); + echo($errorBadCharacters); + } // mauvais captcha elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) { @@ -169,7 +192,13 @@ function connect() header('Location: index.php?page=' . $_GET['from']); exit(); } - + // saisie non valide + elseif(isset($_POST['captcha']) && controlCaptchaInput() == 0) + { + echo($errorNonValidCaptcha); + sleep(1); + echo($formulaireConnexion); + } // mauvais captcha elseif(isset($_POST['captcha']) && (int) $_POST['captcha'] != $_SESSION['captcha']) { diff --git a/erreur404.php b/erreur404.php index e8fc033..b5171d2 100644 --- a/erreur404.php +++ b/erreur404.php @@ -1,6 +1,12 @@ ]+href=")((?!https?://)[^>]+>)#'; +//$data = preg_replace($pattern, '$1http://$2', $data); + // les erreurs 404 sont renvoyées ici par le .htaccess header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php?erreur=404'); diff --git a/model/Article.php b/model/Article.php index 24480ed..d0fb019 100644 --- a/model/Article.php +++ b/model/Article.php @@ -50,13 +50,12 @@ class Article private function makeHtmlMiniImages($content) { - while(preg_match('##', $content)) - { - // ? => mode paresseux, on fait matcher le moins d'occurences possibles - $pattern = '#()#'; - // insérer -mini au nom du dossier et au fichier - $content = preg_replace($pattern, '$1$2-mini$3-mini$4', $content); - } + // insérer -mini au nom du dossier et au fichier + // on choisit pour bien faire de cibler toute la balise + $pattern = array('#(]+/images(?!-mini))([^>]+>)#', + '#(]+)((?]+>)#'); + $remplacement = array('$1-mini$2', '$1-mini$2'); + $content = preg_replace($pattern, $remplacement, $content); return $content; } diff --git a/public/css/donnees_hors_editeur.css b/public/css/donnees_hors_editeur.css index 409dc59..620c6f8 100644 --- a/public/css/donnees_hors_editeur.css +++ b/public/css/donnees_hors_editeur.css @@ -25,7 +25,7 @@ td p{margin: 0px;} .image{width: fit-content;margin: 0px;text-align: center;margin: auto;/*height: 100%;*/} /*.image img{width: 100%;}*/ img{max-width: 100%;} -.image-style-side{float: right;} +.image-style-side{float: right; margin: 15px 0;} .image-style-side:not(.image_resized){max-width: 50%;} .image>figcaption{padding: 7px; text-align: center; font-size: small; background-color: #f0f0f0;} diff --git a/view/password.php b/view/password.php index c52274e..a72766e 100644 --- a/view/password.php +++ b/view/password.php @@ -93,6 +93,7 @@ $header = ob_get_clean(); // messages d'erreur $errorPassword = '

Mauvais mot de passe

'; +$errorNonValidCaptcha = '

Captcha non valide, veuillez saisir un nombre entier.

'; $errorCaptcha = '

Erreur au test anti-robot

'; $errorBadCharacters = '

Caractères interdits: espaces, tabulations, sauts CR/LF.

'; $messageDeconnect = "

N'oubliez de cliquer sur 'déconnexion' quand vous aurez fini.

"; diff --git "a/\303\240 faire apr\303\250s livraison.txt" "b/\303\240 faire apr\303\250s livraison.txt" index fb6dcbb..06f3f8e 100644 --- "a/\303\240 faire apr\303\250s livraison.txt" +++ "b/\303\240 faire apr\303\250s livraison.txt" @@ -2,6 +2,8 @@ variable de session avec vérification du captcha changer la police des titres pour une qui supporte les lettres accentuées +images d'en-tête svg? + changer la polices dans les images de BD (si je trouve mieux que comic sans MS) images des articles en grand et miniature, Zoom sur images (articles) @@ -18,8 +20,6 @@ créer page musique n'utiliser que les grandes images dans le menu -images d'en-tête svg? - déconnexion automatique quand inactivité dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible) -- cgit v1.2.3