summaryrefslogtreecommitdiff
path: root/index.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-07-22 03:49:28 +0200
committerpolo <ordipolo@gmx.fr>2021-07-22 03:49:28 +0200
commit86c2a611e55c9e35384febecf34964e214c0296e (patch)
treee910a2f9a135bfc7059fd28c9af6c00ae46b5fde /index.php
parenta23573d5aff91e18d1240a6ac84c2962a8a15f87 (diff)
downloadmelaine-86c2a611e55c9e35384febecf34964e214c0296e.zip
patch modifs
Diffstat (limited to 'index.php')
-rw-r--r--index.php62
1 files changed, 47 insertions, 15 deletions
diff --git a/index.php b/index.php
index 2d3bcd6..ccce82a 100644
--- a/index.php
+++ b/index.php
@@ -51,9 +51,9 @@ installation();
51 51
52// à propos des sessions, penser aux attaques CSRF (cross-site request forgery): 52// à propos des sessions, penser aux attaques CSRF (cross-site request forgery):
53// ç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 53// ç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
54// - 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 54// - 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
55// - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant 55// - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant
56// - la méthode des jetons, "nonces" et horodatage 56// - il y a la méthode des jetons, "nonces" et horodatage
57// - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête 57// - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête
58// infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery 58// infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery
59session_start(); 59session_start();
@@ -62,20 +62,27 @@ session_start();
62require('lib/htmlawed/htmLawed.php'); 62require('lib/htmlawed/htmLawed.php');
63 63
64// traitement des POST du ckeditor 64// traitement des POST du ckeditor
65// NOTER que le fichier "habituel" controller/admin.php n'est pas utilisé 65// la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET
66// la fonction submitCKeditor n'affiche rien puis redirige sans GET
67if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 66if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1
68 && isset($_GET['action']) && $_GET['action'] == 'submit' 67 && isset($_GET['action']) && $_GET['action'] == 'submit'
69 && isset($_POST['contenu'])) 68 && isset($_POST['contenu']) && $_POST['contenu'] != '')
70{ 69{
71 require('controller/ckeditor.php'); 70 require('controller/ckeditor.php');
72 submitCKeditor($_GET['page'], $_GET['article'], $_POST['contenu']); 71 // modification
73 72 if(isset($_SESSION['nomFichier']))
74 // nettoyage (je ne sais pas si ça sert à quelque chose, mais c'est pas grave) 73 {
75 unlink($_GET['action']); 74 submitCKeditor($_GET['page'], $_SESSION['nomFichier'], $_POST['contenu']);
76 unlink($_POST['contenu']); 75 }
76 // nouvel article
77 else
78 {
79 submitCKeditor($_GET['page'], '', $_POST['contenu']);
80 }
77 81
78 // rechargement "nettoyage" à la fin du traitement 82 // nettoyage
83 unset($_SESSION['nomFichier']);
84 unset($_GET['action']);
85 unset($_POST['contenu']);
79 header('Location: index.php?page=' . $_GET['page']); 86 header('Location: index.php?page=' . $_GET['page']);
80} 87}
81 88
@@ -90,13 +97,20 @@ if(isset($_GET['action']))
90} 97}
91 98
92// le site comporte deux modes: 99// le site comporte deux modes:
93// le mode normal en "lecture seule" utilisant le contrôleur visitor.php 100// le mode visiteur en "lecture seule" utilisant le contrôleur visitor.php
94// le mode admin avec droits en "écriture" utilisant le contrôleur admin.php 101// le mode admin avec droits en "écriture" utilisant le contrôleur admin.php
95 102
96// appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" 103// contrôleur des pages en mode visiteur
97// une optimisation serait bienvenue 104// appe tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" => à améliorer
98require('controller/visitor.php'); 105require('controller/visitor.php');
99 106
107// utile pour presque toutes les pages
108if(isset($_GET['page']) && $_GET['page'] != 'menu')
109{
110 require('model/melaine-read.php');
111}
112
113// contrôleur des pages en mode admin
100if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) 114if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1)
101{ 115{
102 require('controller/admin.php'); 116 require('controller/admin.php');
@@ -122,17 +136,35 @@ if(isset($_GET['page']))
122 // page melaine 136 // page melaine
123 elseif($_GET['page'] == 'melaine') 137 elseif($_GET['page'] == 'melaine')
124 { 138 {
125 // ouverture de l'éditeur 139 // ouverture de l'éditeur pour modification
140 // 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
141 // GET, POST, cookies => navigation (utiles au visiteur)
142 // sessions => action
143 // c'est ici qu'on passe des GET aux sessions
144 // 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é
145 //
126 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor') 146 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor')
127 { 147 {
128 // modification 148 // modification
149 // A MODIFIER! on a aussi besoin du nom du fichier,
150 // infos à mettre dans la session!
151
129 if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0) 152 if(isset($_GET['article']) && is_numeric($_GET['article']) && $_GET['article'] > 0)
130 { 153 {
154 // obtenir le nom du fichier à l'aide du modèle
155 $_SESSION['nomFichier'] = getFileName($_GET['page'], $_GET['article']);
156
131 melaineEdit($_GET['article']); 157 melaineEdit($_GET['article']);
132 } 158 }
133 // nouvel article 159 // nouvel article
134 else 160 else
135 { 161 {
162 // prévenir une hypothétique perte de donnée
163 if(isset($_SESSION['nomFichier']))
164 {
165 unset($_SESSION['nomFichier']);
166 }
167
136 melaineEdit(0); 168 melaineEdit(0);
137 } 169 }
138 } 170 }