From bbf50ae1ffa5b1b3b71f0e57d658d9beaaa50de0 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 14 Jan 2025 23:53:17 +0100 Subject: meilleur filtrage upload AJAX --- index.php | 9 ++--- src/integration/ckeditor5/image_upload.php | 60 ++++++++++++++++-------------- src/integration/ckeditor5/view.php | 7 ++-- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/index.php b/index.php index 9beed23..1ece14f 100644 --- a/index.php +++ b/index.php @@ -2,20 +2,17 @@ // index.php require 'src/integration/ckeditor5/config.php'; -require 'src/integration/ckeditor5/init.php'; +require $ckeditor_integration_path . 'init.php'; makeTranslationSymLink(); // routage // upload images AJAX -if(isset($_GET['action']) && $_GET['action'] === 'upload_image') // image insérée dans l'éditeur => requête AJAX -{ - require $ckeditor_integration_path . 'image_upload.php'; -} +require $ckeditor_integration_path . 'image_upload.php'; // submit normal -elseif(isset($_GET['action']) && $_GET['action'] === 'submit') // HTML envoyé par l'éditeur +if(isset($_GET['action']) && $_GET['action'] === 'submit') // HTML envoyé par l'éditeur { require $ckeditor_integration_path . 'clean_html.php'; $html_from_editor = getAndCleanEditorOutput(); // manipule $_POST['contenu']; diff --git a/src/integration/ckeditor5/image_upload.php b/src/integration/ckeditor5/image_upload.php index 9090ddf..6cbc911 100644 --- a/src/integration/ckeditor5/image_upload.php +++ b/src/integration/ckeditor5/image_upload.php @@ -15,33 +15,50 @@ $erreur = ''; -if(isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok +if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload']) + && strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false // simple upload adapter envoie "des form-data" + && isset($_GET['action']) && $_GET['action'] === 'upload_image') // image insérée dans l'éditeur => requête AJAX { - if($_FILES['upload']['size'] <= $php_ini_max_size ) + if($_FILES['upload']['error'] == 0) // 0 signifie ok { - $infos = pathinfo ($_FILES['upload']['name']); - $extension = $infos['extension']; - $extautorisées = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff']; - // on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur) - if(in_array($extension, $extautorisées)) + if($_FILES['upload']['size'] <= $php_ini_max_size ) { - move_uploaded_file ($_FILES['upload']['tmp_name'], 'data/' . $page . '/images/' . $_FILES['upload']['name']); - chmod('data/' . $page . '/images/' . $_FILES['upload']['name'], 0666); + $infos = pathinfo ($_FILES['upload']['name']); + $extension = $infos['extension']; + $extautorisées = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff']; + // on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur) + if(in_array($extension, $extautorisées)) + { + move_uploaded_file ($_FILES['upload']['tmp_name'], 'data/' . $page . '/images/' . $_FILES['upload']['name']); + chmod('data/' . $page . '/images/' . $_FILES['upload']['name'], 0666); + } + else + { + $erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté'; + } } else { - $erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté'; + $erreur = 'fichier trop lourd'; } } else { - $erreur = 'fichier trop lourd'; + $erreur = $_FILES['upload']['error']; } + + if(empty($erreur)) + { + $chemin = '{"url": "data/' . $page . '/images/' . $_FILES['upload']['name'] . '"}'; + echo $chemin; + } + else + { + echo $erreur; + } + die; } -else -{ - $erreur = $_FILES['upload']['error']; -} + /* les erreurs retournées avec $_FILES['upload']['error']: 0 pas d'erreur 1 taille du fichier supérieure à la valeur de upload_max_filesize dans le fichier php.ini (par défaut = 2 MO) @@ -50,15 +67,4 @@ else 4 pas de fichier du tout 6 pas de dossier temporaire pour mettre le fichier 7 echec de l'écriture sur le DD -8 envoi arrêté par une extension de PHP mais on ne nous dit pas pourquoi => diagnostic avec la fonction phpinfo() */ - -if(empty($erreur)) -{ - $chemin = '{"url": "data/' . $page . '/images/' . $_FILES['upload']['name'] . '"}'; - echo $chemin; -} -else -{ - echo $erreur; -} -die; +8 envoi arrêté par une extension de PHP mais on ne nous dit pas pourquoi => diagnostic avec la fonction phpinfo() */ \ No newline at end of file diff --git a/src/integration/ckeditor5/view.php b/src/integration/ckeditor5/view.php index 794e55f..b5cf5cc 100644 --- a/src/integration/ckeditor5/view.php +++ b/src/integration/ckeditor5/view.php @@ -138,11 +138,10 @@ ob_start(); simpleUpload: { uploadUrl: upload_url, - // Headers supplémentaires envoyés avec la requête - // c'est ici qu'on installe les mécanismes de sécurités comme l'authentification et la protection au CSRF + // authentifier l'envoyeur + protection au CSRF headers: { - //'X-CSRF-TOKEN': 'CSRF-Token', - //Authorization: 'Bearer ' + 'X-CSRF-TOKEN': 'CSRF-Token', + Authorization: 'Bearer ' } }, // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff -- cgit v1.2.3