diff options
author | polo <ordipolo@gmx.fr> | 2023-06-02 01:21:06 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2023-06-02 01:21:06 +0200 |
commit | ce10c0ff1dd0b47bd494ae88ab2eaf6ab354b2b3 (patch) | |
tree | 53fd317773354c86e9eff1a19ea9abad81137901 /controller | |
parent | 082ae3df0b9dd759d56684b0221df62ea171f8ec (diff) | |
download | melaine-ce10c0ff1dd0b47bd494ae88ab2eaf6ab354b2b3.zip |
filtre nom des images + reorg code Image
Diffstat (limited to 'controller')
-rw-r--r-- | controller/Security.php | 44 | ||||
-rw-r--r-- | controller/ajax.php | 10 | ||||
-rw-r--r-- | controller/ckeditor.php | 28 |
3 files changed, 74 insertions, 8 deletions
diff --git a/controller/Security.php b/controller/Security.php index 39205c1..3475a8d 100644 --- a/controller/Security.php +++ b/controller/Security.php | |||
@@ -20,6 +20,50 @@ class Security | |||
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 | |||
24 | public static function secureFileName(string $chaine): string | ||
25 | { | ||
26 | // sécuriser un nom avec chemin avec basename? | ||
27 | //$chaine = basename($chaine); | ||
28 | |||
29 | /* | ||
30 | - caractères interdits sous windows / \ : * ? " < > | | ||
31 | - mac autorise les / | ||
32 | - mac interdit : | ||
33 | - linux autorise tout sauf les / | ||
34 | - imagemagick ne supporte pas les : | ||
35 | |||
36 | - 'espace' fonctionne | ||
37 | - / remplacé par firefox en : | ||
38 | - \ retire ce qui est devant le \ | ||
39 | - * fonctionne | ||
40 | - ? permet le téléchargement mais pas l'affichage | ||
41 | - " ne fonctionne pas, remplacé par %22, filtrer %22 | ||
42 | - < > fonctionnent | ||
43 | - | fonctionne | ||
44 | - = fonctionne, mais je filtre parce qu'on en trouve dans une URL | ||
45 | - ' ` fonctionnent | ||
46 | - % fonctionne | ||
47 | - (){}[] fonctionnent | ||
48 | - ^ fonctionne | ||
49 | - # ne fonctionne pas | ||
50 | - ~ fonctionne | ||
51 | - & fonctionne | ||
52 | */ | ||
53 | |||
54 | // => on remplace tout par des _ | ||
55 | // filtrer / et \ semble inutile | ||
56 | |||
57 | $cibles = [' ', '/', '\\', ':', '*', '?', '<', '>', '|', '=', "'", '`', '"', '%22', '#']; | ||
58 | return(str_replace($cibles, '_', $chaine)); | ||
59 | |||
60 | // les problèmes avec \ persistent !! | ||
61 | // => javascript | ||
62 | // malheureusement document.getElementById('upload').files[0].name = chaine; ne marche pas! interdit! | ||
63 | // solution? | ||
64 | // créer une copie du fichier et l'envoyer à la place | ||
65 | // envoyer le nom souhaité au serveur en AJAX puis renommer avec PHP | ||
66 | } | ||
23 | } | 67 | } |
24 | 68 | ||
25 | // erreurs à la création des mots de passe | 69 | // erreurs à la création des mots de passe |
diff --git a/controller/ajax.php b/controller/ajax.php index ed840cd..9272dea 100644 --- a/controller/ajax.php +++ b/controller/ajax.php | |||
@@ -17,7 +17,8 @@ if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_ | |||
17 | else | 17 | else |
18 | { | 18 | { |
19 | require('model/Image.php'); | 19 | require('model/Image.php'); |
20 | // vaut "true" parce qu'on reçoit une requête AJAX | 20 | require('controller/Security.php'); |
21 | // paramètre "true" parce qu'on reçoit une requête AJAX | ||
21 | $Image = new Image($_GET['page'], $_GET['page'], true); | 22 | $Image = new Image($_GET['page'], $_GET['page'], true); |
22 | // les données des albums sont dans le dossier discographie | 23 | // les données des albums sont dans le dossier discographie |
23 | if($_GET['page'] === 'album') | 24 | if($_GET['page'] === 'album') |
@@ -25,12 +26,15 @@ if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_ | |||
25 | $Image->setFolder('discographie'); | 26 | $Image->setFolder('discographie'); |
26 | } | 27 | } |
27 | 28 | ||
28 | $Image->upload(); | 29 | $nomFichier = Security::secureFileName($_FILES['upload']['name']); |
30 | $Image->setFileName($nomFichier); | ||
31 | $Image->setThumbnailWidth(630); | ||
29 | 32 | ||
33 | $Image->upload(); | ||
30 | echo($Image->reponseAjax); // attendu par l'éditeur | 34 | echo($Image->reponseAjax); // attendu par l'éditeur |
31 | // attention ici aux var_dump() ou echo() qui trainent | 35 | // attention ici aux var_dump() ou echo() qui trainent |
32 | 36 | ||
33 | $Image->makeThumbnail(630); // => taille de la <div> | 37 | $Image->makeThumbnail(); // => taille de la <div> |
34 | // on pourra l'agrandir en cliquant dessus | 38 | // on pourra l'agrandir en cliquant dessus |
35 | // code exécuté alors que l'utilisateur récupère la main | 39 | // code exécuté alors que l'utilisateur récupère la main |
36 | } | 40 | } |
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 4d4639d..3765261 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
@@ -66,7 +66,7 @@ function submitCKeditor() | |||
66 | if($_GET['page'] === 'discographie' || $_GET['page'] === 'album') | 66 | if($_GET['page'] === 'discographie' || $_GET['page'] === 'album') |
67 | { | 67 | { |
68 | $Album = new Album($_GET['page'], 'discographie'); | 68 | $Album = new Album($_GET['page'], 'discographie'); |
69 | 69 | ||
70 | // on retrouve les données si nécessaire | 70 | // on retrouve les données si nécessaire |
71 | if(isset($_SESSION['file_code']) && $_SESSION['file_code'] != '') | 71 | if(isset($_SESSION['file_code']) && $_SESSION['file_code'] != '') |
72 | { | 72 | { |
@@ -76,10 +76,28 @@ function submitCKeditor() | |||
76 | 76 | ||
77 | $nouveauTitre = Security::secureString($_POST['titre']); | 77 | $nouveauTitre = Security::secureString($_POST['titre']); |
78 | $nouvelleAnnee = Security::secureString($_POST['annee']); | 78 | $nouvelleAnnee = Security::secureString($_POST['annee']); |
79 | |||
80 | // enregistrement de l'image | ||
79 | if(!empty($_FILES['upload']['name'])) | 81 | if(!empty($_FILES['upload']['name'])) |
80 | { | 82 | { |
81 | $nouvellePochette = $_FILES['upload']['name']; | 83 | require('model/Image.php'); |
82 | $nouvellePochetteMini = pathinfo($_FILES['upload']['name'], PATHINFO_FILENAME) . '-mini.' . pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION); | 84 | $Image = new Image($_GET['page'], 'discographie', false); |
85 | $nomFichier = Security::secureFileName($_FILES['upload']['name']); | ||
86 | $Image->setFileName($nomFichier); | ||
87 | $Image->setThumbnailWidth(201); | ||
88 | |||
89 | $nouvellePochette = $nomFichier; | ||
90 | /*$nouvellePochetteMini = pathinfo($_FILES['upload']['name'], PATHINFO_FILENAME) . '-mini.' . pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION);*/ | ||
91 | $nouvellePochetteMini = pathinfo($nomFichier, PATHINFO_FILENAME) . '-mini.' . pathinfo($nomFichier, PATHINFO_EXTENSION); | ||
92 | |||
93 | $Image->upload(); | ||
94 | $Image->makeThumbnail(); | ||
95 | |||
96 | $erreur = $Image->erreur; | ||
97 | if(!empty($erreur)) | ||
98 | { | ||
99 | // remettre pochette précédente si il y a | ||
100 | } | ||
83 | } | 101 | } |
84 | else | 102 | else |
85 | { | 103 | { |
@@ -89,11 +107,11 @@ function submitCKeditor() | |||
89 | 107 | ||
90 | //var_dump($nouvellePochetteMini); die(); | 108 | //var_dump($nouvellePochetteMini); die(); |
91 | 109 | ||
92 | // enregistrement nouvel album | 110 | // enregistrement du texte JSON |
93 | if(!isset($_SESSION['file_code']) || $_SESSION['file_code'] == '') | 111 | if(!isset($_SESSION['file_code']) || $_SESSION['file_code'] == '') |
94 | { | 112 | { |
95 | // page disco | 113 | // page disco |
96 | $Album->createVignette($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini); | 114 | $Album->createVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini); |
97 | 115 | ||
98 | // page de l'album | 116 | // page de l'album |
99 | if(!empty($_POST['contenu'])) | 117 | if(!empty($_POST['contenu'])) |