From 90673ef19133e037cf401773f4262ba3d7d050bf Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 3 Aug 2025 04:06:53 +0200 Subject: =?UTF-8?q?r=C3=A9organisation=204:=20d=C3=A9placement=20de=20fich?= =?UTF-8?q?iers,=20plus=20que=20des=20contr=C3=B4leurs=20dans=20/src/contr?= =?UTF-8?q?oller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/Security.php | 117 -------------------------------------------- 1 file changed, 117 deletions(-) delete mode 100644 src/controller/Security.php (limited to 'src/controller/Security.php') diff --git a/src/controller/Security.php b/src/controller/Security.php deleted file mode 100644 index b882d42..0000000 --- a/src/controller/Security.php +++ /dev/null @@ -1,117 +0,0 @@ -1, // protection contre les élements et attributs dangereux - - // liste blanche d'éléments HTML - 'elements'=> 'h1, h2, h3, h4, h5, h6, p, br, s, em, span, strong, a, ul, ol, li, sup, sub, code, blockquote, div, pre, table, caption, colgroup, col, tbody, tr, th, td, figure, img, figcaption, iframe, small', - - // liste noire d'attributs HTML - 'deny_attribute'=> 'id, class' // on garde 'style' - ); - // faire qu'un certain élément puisse n'avoir que certains attributs, regarder la doc - private static $specHtmLawed = ''; - - // ATTENTION, n'applique pas htmlspecialchars() !! - public static function secureString(string $chaine): string - { - return trim(htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed)); - } - - public static function secureFileName(string $chaine): string - { - // sécuriser un nom avec chemin avec basename? - //$chaine = basename($chaine); - - /* - - caractères interdits sous windows / \ : * ? " < > | - - mac autorise les / - - mac interdit : - - linux autorise tout sauf les / - - imagemagick ne supporte pas les : - - - 'espace' fonctionne - - / remplacé par firefox en : - - \ retire ce qui est devant le \ - - * fonctionne - - ? permet le téléchargement mais pas l'affichage - - " ne fonctionne pas, remplacé par %22, filtrer %22 - - < > fonctionnent - - | fonctionne - - = fonctionne, mais je filtre parce qu'on en trouve dans une URL - - ' ` fonctionnent - - % fonctionne - - (){}[] fonctionnent - - ^ fonctionne - - # ne fonctionne pas - - ~ fonctionne - - & fonctionne - - ^ pas encore testé - */ - - // => on remplace tout par des _ - // filtrer / et \ semble inutile - - /*$cibles = [' ', '/', '\\', ':', '*', '?', '<', '>', '|', '=', "'", '`', '"', '%22', '#']; - $chaine = str_replace($cibles, '_', $chaine); // nécéssite l'extension mbstring - $chaine = mb_strtolower($chaine); - return($chaine);*/ - - $chaine = preg_replace('/[^a-zA-Z0-9_-]/', '_', $chaine); // ne garder que les lettres, chiffres, tirets et underscores - $chaine = preg_replace('/_+/', '_', $chaine); // doublons d'underscores - return trim($chaine, '_'); - - // les problèmes avec \ persistent !! - // => javascript - // malheureusement document.getElementById('upload').files[0].name = chaine; ne marche pas! interdit! - // javascript ne doit pas pouvoir accéder au système de fichiers - // solutions: - // - au lieu de fournir une chaine (le chemin du fichier), donner un objet à files[0].name - // - créer une copie du fichier et l'envoyer à la place - // - envoyer le fichier en AJAX - // - envoyer le nom du fichier à part puis renommer en PHP - } -} - -// erreurs à la création des mots de passe -function removeSpacesTabsCRLF(string $chaine): string -{ - $cibles = [' ', "\t", "\n", "\r"]; // doubles quotes !! - return(str_replace($cibles, '', $chaine)); -} - -// 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 - - // regex pour détecter les balises et ajouter http:// au début des liens si nécessaire - $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); -} -- cgit v1.2.3