diff options
author | polo <ordipolo@gmx.fr> | 2021-07-22 03:49:28 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-07-22 03:49:28 +0200 |
commit | 86c2a611e55c9e35384febecf34964e214c0296e (patch) | |
tree | e910a2f9a135bfc7059fd28c9af6c00ae46b5fde /index.php | |
parent | a23573d5aff91e18d1240a6ac84c2962a8a15f87 (diff) | |
download | melaine-86c2a611e55c9e35384febecf34964e214c0296e.zip |
patch modifs
Diffstat (limited to 'index.php')
-rw-r--r-- | index.php | 62 |
1 files changed, 47 insertions, 15 deletions
@@ -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 |
59 | session_start(); | 59 | session_start(); |
@@ -62,20 +62,27 @@ session_start(); | |||
62 | require('lib/htmlawed/htmLawed.php'); | 62 | require('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 | ||
67 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | 66 | if(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 | // appelé tout le temps parce que certaines pages (accueil, menu) n'ont pas de version "admin" => à améliorer |
98 | require('controller/visitor.php'); | 105 | require('controller/visitor.php'); |
99 | 106 | ||
107 | // utile pour presque toutes les pages | ||
108 | if(isset($_GET['page']) && $_GET['page'] != 'menu') | ||
109 | { | ||
110 | require('model/melaine-read.php'); | ||
111 | } | ||
112 | |||
113 | // contrôleur des pages en mode admin | ||
100 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1) | 114 | if(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 | } |