diff options
-rw-r--r-- | controller/Security.php | 30 | ||||
-rw-r--r-- | controller/ckeditor.php | 29 | ||||
-rw-r--r-- | controller/media.php | 1 | ||||
-rw-r--r-- | public/css/accueil.css | 2 | ||||
-rw-r--r-- | public/main.js | 8 | ||||
-rw-r--r-- | view/courriel.php | 2 | ||||
-rw-r--r-- | à faire après livraison.txt | 8 |
7 files changed, 35 insertions, 45 deletions
diff --git a/controller/Security.php b/controller/Security.php index 15c44b2..ac1149e 100644 --- a/controller/Security.php +++ b/controller/Security.php | |||
@@ -1,6 +1,9 @@ | |||
1 | <?php | 1 | <?php |
2 | // controller/Security.php | 2 | // controller/Security.php |
3 | 3 | ||
4 | // sécurité faille XSS avec htmLawed | ||
5 | require('lib/htmlawed/htmLawed.php'); | ||
6 | |||
4 | class Security | 7 | class Security |
5 | { | 8 | { |
6 | private static $configHtmLawed = array( | 9 | private static $configHtmLawed = array( |
@@ -13,17 +16,38 @@ class Security | |||
13 | 16 | ||
14 | public static function secureString(string $chaine): string | 17 | public static function secureString(string $chaine): string |
15 | { | 18 | { |
16 | // sécurité faille XSS avec htmLawed | ||
17 | require('lib/htmlawed/htmLawed.php'); | ||
18 | |||
19 | $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); | 19 | $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); |
20 | $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) | 20 | $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) |
21 | return $chaine; | 21 | return $chaine; |
22 | } | 22 | } |
23 | } | 23 | } |
24 | 24 | ||
25 | // erreurs à la création des mots de passe | ||
25 | function removeSpacesTabsCRLF(string $chaine): string | 26 | function removeSpacesTabsCRLF(string $chaine): string |
26 | { | 27 | { |
27 | $cibles = [' ', "\t", "\n", "\r"]; // doubles quotes !! | 28 | $cibles = [' ', "\t", "\n", "\r"]; // doubles quotes !! |
28 | return(str_replace($cibles, '', $chaine)); | 29 | return(str_replace($cibles, '', $chaine)); |
29 | } | 30 | } |
31 | |||
32 | // lien sans http:// | ||
33 | function fixLinks($data) | ||
34 | { | ||
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 | // 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 | |||
39 | // regex pour détecter les balises <a> et ajouter http:// au début des liens si nécessaire | ||
40 | $pattern = '#(<a.*href=")((?!https?://).*)(".*>)#'; | ||
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?? | ||
43 | while(preg_match($pattern, $data)) | ||
44 | { | ||
45 | $data = preg_replace($pattern, $remplacement, $data); | ||
46 | } | ||
47 | |||
48 | // 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 | // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; | ||
50 | // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière? | ||
51 | |||
52 | return($data); | ||
53 | } \ No newline at end of file | ||
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index d6ea8ad..43fd2e2 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
@@ -142,32 +142,3 @@ function submitCKeditor() | |||
142 | header('Location: index.php?page=' . $_GET['page']); | 142 | header('Location: index.php?page=' . $_GET['page']); |
143 | exit(); | 143 | exit(); |
144 | } | 144 | } |
145 | |||
146 | |||
147 | // lien sans http:// | ||
148 | // 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:// | ||
149 | // tomber ainsi sur une page d'erreur est parfaitement déroutant | ||
150 | // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème | ||
151 | // 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 | ||
152 | // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; | ||
153 | // le .htaccess doit pour ça détecter que l'erreur 404 est particulière | ||
154 | |||
155 | function fixLinks($data) | ||
156 | { | ||
157 | // regex pour détecter les balises <a>, analyser les liens à l'interieur et les modifier si nécessaire | ||
158 | $pattern = '#<a href=".*">.*</a>#'; | ||
159 | |||
160 | if(preg_match($pattern, $data)) | ||
161 | {} | ||
162 | |||
163 | //$remplacement = 'http://$0'; | ||
164 | //$data = preg_replace($pattern, $remplacement, $data); | ||
165 | |||
166 | // contrairement à ce qui dit la doc | ||
167 | // https://www.php.net/manual/fr/filter.filters.validate.php | ||
168 | // une adresse du type "domaine.fr" ne passe pas le filtre | ||
169 | // il renvoie false, ce qui nous arrange ici! | ||
170 | //var_dump(filter_var($link, FILTER_VALIDATE_URL)); | ||
171 | |||
172 | return($data); | ||
173 | } | ||
diff --git a/controller/media.php b/controller/media.php index c6682df..27a8bb3 100644 --- a/controller/media.php +++ b/controller/media.php | |||
@@ -48,7 +48,6 @@ function mediaSubmit($chaine) | |||
48 | // c'est du complètement calqué sur le javascript, avec une syntaxe PHP | 48 | // c'est du complètement calqué sur le javascript, avec une syntaxe PHP |
49 | // et en plus elle est super vieille, elle ne connaît pas les balises HTML5 ! | 49 | // et en plus elle est super vieille, elle ne connaît pas les balises HTML5 ! |
50 | // mais une balise c'est une balise donc ça marche quand même | 50 | // mais une balise c'est une balise donc ça marche quand même |
51 | // la doc de PHP est comme toujours plutôt bonne, elle indique les types de données manipulées | ||
52 | // https://www.php.net/manual/fr/book.dom.php | 51 | // https://www.php.net/manual/fr/book.dom.php |
53 | $dom = new DOMDocument; | 52 | $dom = new DOMDocument; |
54 | 53 | ||
diff --git a/public/css/accueil.css b/public/css/accueil.css index 7d75e11..344f601 100644 --- a/public/css/accueil.css +++ b/public/css/accueil.css | |||
@@ -274,7 +274,7 @@ footer | |||
274 | 274 | ||
275 | /* compensation des cibles de liens # | 275 | /* compensation des cibles de liens # |
276 | superposées au "nav" hors flux */ | 276 | superposées au "nav" hors flux */ |
277 | :target | 277 | .articleSansEditeur:target |
278 | { | 278 | { |
279 | padding-top: 70px; | 279 | padding-top: 70px; |
280 | margin-top: -70px; | 280 | margin-top: -70px; |
diff --git a/public/main.js b/public/main.js index b6021d6..5ca23c7 100644 --- a/public/main.js +++ b/public/main.js | |||
@@ -16,11 +16,10 @@ function deconnexionAutomatique() | |||
16 | // sauvegarde de la rédaction en cours avec le plugin "autosave" de l'éditeur | 16 | // sauvegarde de la rédaction en cours avec le plugin "autosave" de l'éditeur |
17 | } | 17 | } |
18 | 18 | ||
19 | // fonction appelée avec onClick dans un lien, | 19 | function confirmerSuppression() // appel 'onCLick' |
20 | // si JS est activé, on ne suit le lien qu'avec un "oui" | ||
21 | // si JS est désactivé, le lien fonctionne | ||
22 | function confirmerSuppression() | ||
23 | { | 20 | { |
21 | // avec JS, on ne suit le lien qu'avec un "oui" | ||
22 | // sans JS, le lien fonctionne | ||
24 | var oui = confirm('Confirmer la suppression de cet article.'); | 23 | var oui = confirm('Confirmer la suppression de cet article.'); |
25 | if(!oui) | 24 | if(!oui) |
26 | { | 25 | { |
@@ -78,6 +77,7 @@ function copierAdresse() | |||
78 | } | 77 | } |
79 | 78 | ||
80 | // cacher le lien #nouvelArticle quand le ckeditor est appelé | 79 | // cacher le lien #nouvelArticle quand le ckeditor est appelé |
80 | // hum pourquoi faire déjà? | ||
81 | // function cacherLienArticle() | 81 | // function cacherLienArticle() |
82 | // { | 82 | // { |
83 | // var cible = document.getElementById('nouvelArticle'); | 83 | // var cible = document.getElementById('nouvelArticle'); |
diff --git a/view/courriel.php b/view/courriel.php index 3d401fb..7dd7ba4 100644 --- a/view/courriel.php +++ b/view/courriel.php | |||
@@ -1,5 +1,5 @@ | |||
1 | <div id="courriel" > | 1 | <div id="courriel" > |
2 | <button ><a href="index.php?page=<?= $page ?>" >Haut de la page</a></button> | 2 | <button ><a href="#bloc_page" >Haut de la page</a></button> |
3 | <div> | 3 | <div> |
4 | <img src="public/timbre.png" alt="" ><br />Envoyez-moi un courriel à: <img src="public/courriel.png" > | 4 | <img src="public/timbre.png" alt="" ><br />Envoyez-moi un courriel à: <img src="public/courriel.png" > |
5 | </div> | 5 | </div> |
diff --git a/à faire après livraison.txt b/à faire après livraison.txt index b8de449..faf0131 100644 --- a/à faire après livraison.txt +++ b/à faire après livraison.txt | |||
@@ -2,15 +2,11 @@ rassembler les pages | |||
2 | presse (fille qui tombe) dans melaine | 2 | presse (fille qui tombe) dans melaine |
3 | ateliers (cheval) dans archives (blonde) | 3 | ateliers (cheval) dans archives (blonde) |
4 | remplacer concerts (sirene) par "écouter" | 4 | remplacer concerts (sirene) par "écouter" |
5 | une page mentions légales (dans fille qui tombe ou cheval) | 5 | remplacer liens (fille qui tombe) par "mentions légales" |
6 | |||
7 | liens sans http dans l'éditeur | ||
8 | 6 | ||
9 | dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible) | 7 | dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible) |
10 | 8 | ||
11 | réduire les droits des dossiers | 9 | réduire les droits des dossiers? |
12 | |||
13 | bouton pour remonter: remplacer le lien par du JS pour ne pas recharger la page | ||
14 | 10 | ||
15 | captcha dans password.php? | 11 | captcha dans password.php? |
16 | 12 | ||