summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-03-11 16:51:40 +0100
committerpolo <ordipolo@gmx.fr>2022-03-11 16:51:40 +0100
commitec2d263b5c6d619349756e9a8a3d866f2fe46dbd (patch)
treea4142adeb61c46b3e5ee9c5a05677b0c92d9483e /controller
parentf331b3ab14f2b404c2089607aba2e2d434cd510d (diff)
downloadmelaine-ec2d263b5c6d619349756e9a8a3d866f2fe46dbd.zip
regression require htmlawed, lien sans http dans Security, bouton remonter
Diffstat (limited to 'controller')
-rw-r--r--controller/Security.php30
-rw-r--r--controller/ckeditor.php29
-rw-r--r--controller/media.php1
3 files changed, 27 insertions, 33 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
5require('lib/htmlawed/htmLawed.php');
6
4class Security 7class 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
25function removeSpacesTabsCRLF(string $chaine): string 26function 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://
33function 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
155function 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