From 86c2a611e55c9e35384febecf34964e214c0296e Mon Sep 17 00:00:00 2001 From: polo Date: Thu, 22 Jul 2021 03:49:28 +0200 Subject: patch modifs --- index.php | 62 +++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 15 deletions(-) (limited to 'index.php') diff --git a/index.php b/index.php index 2d3bcd6..ccce82a 100644 --- a/index.php +++ b/index.php @@ -51,9 +51,9 @@ installation(); // à propos des sessions, penser aux attaques CSRF (cross-site request forgery): // ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable -// - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST nécessite d'injecter du javascript +// - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST est possible aussi mais plus difficile et nécessite d'injecter du javascript // - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant -// - la méthode des jetons, "nonces" et horodatage +// - il y a la méthode des jetons, "nonces" et horodatage // - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery session_start(); @@ -62,20 +62,27 @@ session_start(); require('lib/htmlawed/htmLawed.php'); // traitement des POST du ckeditor -// NOTER que le fichier "habituel" controller/admin.php n'est pas utilisé -// la fonction submitCKeditor n'affiche rien puis redirige sans GET +// la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'submit' - && isset($_POST['contenu'])) + && isset($_POST['contenu']) && $_POST['contenu'] != '') { require('controller/ckeditor.php'); - submitCKeditor($_GET['page'], $_GET['article'], $_POST['contenu']); - - // nettoyage (je ne sais pas si ça sert à quelque chose, mais c'est pas grave) - unlink($_GET['action']); - unlink($_POST['contenu']); + // modification + if(isset($_SESSION['nomFichier'])) + { + submitCKeditor($_GET['page'], $_SESSION['nomFichier'], $_POST['contenu']); + } + // nouvel article + else + { + submitCKeditor($_GET['page'], '', $_POST['contenu']); + } - // rechargement "nettoyage" à la fin du traitement + // nettoyage + unset($_SESSION['nomFichier']); + unset($_GET['action']); + unset($_POST['contenu']); header('Location: index.php?page=' . $_GET['page']); } @@ -90,13 +97,20 @@ if(isset($_GET['action'])) } // le site comporte deux modes: -// le mode normal en "lecture seule" utilisant le contrôleur visitor.php +// le mode visiteur en "lecture seule" utilisant le contrôleur visitor.php // le mode admin avec droits en "écriture" utilisant le contrôleur admin.php -// appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" -// une optimisation serait bienvenue +// contrôleur des pages en mode visiteur +// appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" => à améliorer require('controller/visitor.php'); +// utile pour presque toutes les pages +if(isset($_GET['page']) && $_GET['page'] != 'menu') +{ + require('model/melaine-read.php'); +} + +// contrôleur des pages en mode admin if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) { require('controller/admin.php'); @@ -122,17 +136,35 @@ if(isset($_GET['page'])) // page melaine elseif($_GET['page'] == 'melaine') { - // ouverture de l'éditeur + // ouverture de l'éditeur pour modification + // le lien utilisé pour ouvrir l'éditeur contient un GET avec le numéro de l'article, mais pas le nom du fichier que le visiteur ne doit pas voir + // GET, POST, cookies => navigation (utiles au visiteur) + // sessions => action + // c'est ici qu'on passe des GET aux sessions + // on associe maintenant le numéro de l'article et le nom du fichier, l'article déjà existant inséré dans l'éditeur DOIT être celui qui sera modifié + // if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') { // modification + // A MODIFIER! on a aussi besoin du nom du fichier, + // infos à mettre dans la session! + if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) { + // obtenir le nom du fichier à l'aide du modèle + $_SESSION['nomFichier'] = getFileName($_GET['page'], $_GET['article']); + melaineEdit($_GET['article']); } // nouvel article else { + // prévenir une hypothétique perte de donnée + if(isset($_SESSION['nomFichier'])) + { + unset($_SESSION['nomFichier']); + } + melaineEdit(0); } } -- cgit v1.2.3