diff options
| author | polo <ordipolo@gmx.fr> | 2022-03-11 16:51:40 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2022-03-11 16:51:40 +0100 |
| commit | ec2d263b5c6d619349756e9a8a3d866f2fe46dbd (patch) | |
| tree | a4142adeb61c46b3e5ee9c5a05677b0c92d9483e /controller | |
| parent | f331b3ab14f2b404c2089607aba2e2d434cd510d (diff) | |
| download | melaine-ec2d263b5c6d619349756e9a8a3d866f2fe46dbd.tar.gz melaine-ec2d263b5c6d619349756e9a8a3d866f2fe46dbd.tar.bz2 melaine-ec2d263b5c6d619349756e9a8a3d866f2fe46dbd.zip | |
regression require htmlawed, lien sans http dans Security, bouton remonter
Diffstat (limited to 'controller')
| -rw-r--r-- | controller/Security.php | 30 | ||||
| -rw-r--r-- | controller/ckeditor.php | 29 | ||||
| -rw-r--r-- | controller/media.php | 1 |
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 | ||
| 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 | ||
