summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.htaccess7
-rw-r--r--controller/Security.php29
-rw-r--r--controller/password.php49
-rw-r--r--erreur404.php6
-rw-r--r--model/Article.php13
-rw-r--r--public/css/donnees_hors_editeur.css2
-rw-r--r--view/password.php1
-rw-r--r--à faire après livraison.txt4
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 @@
2# ne décocher qu'une seule ligne "ErrorDocument" 2# ne décocher qu'une seule ligne "ErrorDocument"
3 3
4# site simple 4# site simple
5#ErrorDocument 404 http://localhost/melaine/erreur404.php 5#ErrorDocument 404 /melaine/erreur404.php
6 6
7# site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut) 7# site "hôte virtuel" local: melaine.localhost
8ErrorDocument 404 /erreur404.php 8ErrorDocument 404 /erreur404.php
9
10# en utilisant une adresse distante (http)
11#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
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 {
diff --git a/erreur404.php b/erreur404.php
index e8fc033..b5171d2 100644
--- a/erreur404.php
+++ b/erreur404.php
@@ -1,6 +1,12 @@
1<?php 1<?php
2// erreur404.php 2// erreur404.php
3 3
4// cas des liens sans http:// devant (peut-être pas gérable)
5//var_dump($_SERVER['REQUEST_URI']);
6//exit();
7//$pattern = '#(<a[^>]+href=")((?!https?://)[^>]+>)#';
8//$data = preg_replace($pattern, '$1http://$2', $data);
9
4// les erreurs 404 sont renvoyées ici par le .htaccess 10// les erreurs 404 sont renvoyées ici par le .htaccess
5header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php?erreur=404'); 11header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php?erreur=404');
6 12
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
50 50
51 private function makeHtmlMiniImages($content) 51 private function makeHtmlMiniImages($content)
52 { 52 {
53 while(preg_match('#<img src=.+/images/.+>#', $content)) 53 // insérer -mini au nom du dossier et au fichier
54 { 54 // on choisit pour bien faire de cibler toute la balise <img/>
55 // ? => mode paresseux, on fait matcher le moins d'occurences possibles 55 $pattern = array('#(<img[^>]+/images(?!-mini))([^>]+>)#',
56 $pattern = '#(<img src=.+/)(images)(/.+?)(\.jpg|\.jpeg|\.png|\.gif.+>)#'; 56 '#(<img[^>]+)((?<!-mini)(\.jpg|\.jpeg|\.png|\.gif)[^>]+>)#');
57 // insérer -mini au nom du dossier et au fichier 57 $remplacement = array('$1-mini$2', '$1-mini$2');
58 $content = preg_replace($pattern, '$1$2-mini$3-mini$4', $content); 58 $content = preg_replace($pattern, $remplacement, $content);
59 }
60 59
61 return $content; 60 return $content;
62 } 61 }
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;}
25.image{width: fit-content;margin: 0px;text-align: center;margin: auto;/*height: 100%;*/} 25.image{width: fit-content;margin: 0px;text-align: center;margin: auto;/*height: 100%;*/}
26/*.image img{width: 100%;}*/ 26/*.image img{width: 100%;}*/
27img{max-width: 100%;} 27img{max-width: 100%;}
28.image-style-side{float: right;} 28.image-style-side{float: right; margin: 15px 0;}
29.image-style-side:not(.image_resized){max-width: 50%;} 29.image-style-side:not(.image_resized){max-width: 50%;}
30.image>figcaption{padding: 7px; text-align: center; font-size: small; background-color: #f0f0f0;} 30.image>figcaption{padding: 7px; text-align: center; font-size: small; background-color: #f0f0f0;}
31 31
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();
93 93
94// messages d'erreur 94// messages d'erreur
95$errorPassword = '<p class="avertissement" >Mauvais mot de passe</p>'; 95$errorPassword = '<p class="avertissement" >Mauvais mot de passe</p>';
96$errorNonValidCaptcha = '<p class="avertissement" >Captcha non valide, veuillez saisir un nombre entier.</p>';
96$errorCaptcha = '<p class="avertissement" >Erreur au test anti-robot</p>'; 97$errorCaptcha = '<p class="avertissement" >Erreur au test anti-robot</p>';
97$errorBadCharacters = '<p class="avertissement" >Caractères interdits: espaces, tabulations, sauts CR/LF.</p>'; 98$errorBadCharacters = '<p class="avertissement" >Caractères interdits: espaces, tabulations, sauts CR/LF.</p>';
98$messageDeconnect = "<p class='connexionP connexionFooter' ><i>N'oubliez de cliquer sur 'déconnexion' quand vous aurez fini.</i></p>"; 99$messageDeconnect = "<p class='connexionP connexionFooter' ><i>N'oubliez de cliquer sur 'déconnexion' quand vous aurez fini.</i></p>";
diff --git a/à faire après livraison.txt b/à faire après livraison.txt
index fb6dcbb..06f3f8e 100644
--- a/à faire après livraison.txt
+++ b/à faire après livraison.txt
@@ -2,6 +2,8 @@ variable de session avec vérification du captcha
2 2
3changer la police des titres pour une qui supporte les lettres accentuées 3changer la police des titres pour une qui supporte les lettres accentuées
4 4
5images d'en-tête svg?
6
5changer la polices dans les images de BD (si je trouve mieux que comic sans MS) 7changer la polices dans les images de BD (si je trouve mieux que comic sans MS)
6 8
7images des articles en grand et miniature, Zoom sur images (articles) 9images des articles en grand et miniature, Zoom sur images (articles)
@@ -18,8 +20,6 @@ créer page musique
18 20
19n'utiliser que les grandes images dans le menu 21n'utiliser que les grandes images dans le menu
20 22
21images d'en-tête svg?
22
23déconnexion automatique quand inactivité 23déconnexion automatique quand inactivité
24 24
25dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible) 25dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible)