summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2021-11-26 04:29:10 +0100
committerpolo <ordipolo@gmx.fr>2021-11-26 04:29:10 +0100
commitb97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f (patch)
tree528ec98f86a61b492d7ebce61486647f633b1f42 /controller
parentcdf1bda847edd3e22e9fe817a802219ad8e0f626 (diff)
downloadmelaine-b97a68343ec5c4ff1fae25ff5dc41f1a2ce6a17f.zip
disco modif/suppr désordre
Diffstat (limited to 'controller')
-rw-r--r--controller/Security.php23
-rw-r--r--controller/admin.php26
-rw-r--r--controller/ckeditor.php32
-rw-r--r--controller/visitor.php16
4 files changed, 51 insertions, 46 deletions
diff --git a/controller/Security.php b/controller/Security.php
new file mode 100644
index 0000000..98d2e74
--- /dev/null
+++ b/controller/Security.php
@@ -0,0 +1,23 @@
1<?php
2// controller/Security.php
3
4// sécurité faille XSS avec htmLawed
5require('lib/htmlawed/htmLawed.php');
6
7class Security // toute statique, inutile de l'instancier
8{
9 private static $configHtmLawed = array(
10 'safe'=>1, // protection contre les élements et attributs dangereux
11 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées
12 'deny_attribute'=>'id', // gêner le JS hostile
13 // on garde 'class' et 'style' utilisés par le ckediteur
14 );
15 private static $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
16
17 public static function secureString($chaine)
18 {
19 $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed);
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;
22 }
23}
diff --git a/controller/admin.php b/controller/admin.php
index ba6fd83..90924e0 100644
--- a/controller/admin.php
+++ b/controller/admin.php
@@ -9,9 +9,8 @@ function melaineEdit($numArticle, $suppression)
9 $page_actuelle = "melaine"; 9 $page_actuelle = "melaine";
10 10
11 // modèle 11 // modèle
12 $Article = new OneArticle($page_actuelle); 12 $Article = new Page($page_actuelle, 'html');
13 $Article->makeFileList(); 13
14
15 // nouvel article 14 // nouvel article
16 if($numArticle == 0) 15 if($numArticle == 0)
17 { 16 {
@@ -22,7 +21,7 @@ function melaineEdit($numArticle, $suppression)
22 { 21 {
23 // nom de l'article ciblé (objet et session) 22 // nom de l'article ciblé (objet et session)
24 $Article->findFileName($numArticle); 23 $Article->findFileName($numArticle);
25 $_SESSION['nomFichier'] = $Article->getFileName(); 24 $_SESSION['nomFichier'] = $Article->fileName;
26 25
27 // suppression 26 // suppression
28 if($suppression) 27 if($suppression)
@@ -62,13 +61,13 @@ function melaineEdit($numArticle, $suppression)
62 require('view/template.php'); 61 require('view/template.php');
63} 62}
64 63
65function discoEdit($numArticle, $suppression) 64function discoEdit($numArticle, $albumCode, $suppression)
66{ 65{
67 $page_actuelle = "discographie"; 66 $page_actuelle = "discographie";
68 $title = "Discographie"; 67 $title = "Discographie";
69 68
70 // modèle 69 // modèle
71 $Album = new OneArticle($page_actuelle); 70 $Album = new Album($page_actuelle);
72 $Album->makeFileList(); 71 $Album->makeFileList();
73 72
74 // nouvel album 73 // nouvel album
@@ -81,7 +80,7 @@ function discoEdit($numArticle, $suppression)
81 { 80 {
82 // nom de l'article ciblé (objet et session) 81 // nom de l'article ciblé (objet et session)
83 $Album->findFileName($numArticle); 82 $Album->findFileName($numArticle);
84 $_SESSION['nomFichier'] = $Album->getFileName(); 83 $_SESSION['nomFichier'] = $Album->fileName;
85 84
86 // suppression 85 // suppression
87 if($suppression) 86 if($suppression)
@@ -94,7 +93,8 @@ function discoEdit($numArticle, $suppression)
94 else 93 else
95 { 94 {
96 $title = "Modifier un album"; 95 $title = "Modifier un album";
97 $texte = $Album->readOne(); // entrée de l'éditeur 96 $texte = $Album->readOneAlbum($albumCode);
97 $vignette = json_decode($Album->getVignette(), true);
98 } 98 }
99 } 99 }
100 100
@@ -106,11 +106,10 @@ function discoEdit($numArticle, $suppression)
106 $texte = preparationCKeditor($numArticle, $texte); 106 $texte = preparationCKeditor($numArticle, $texte);
107 } 107 }
108 108
109
110 // contenu de tous les fichiers JSON (= tableau de chaines) 109 // contenu de tous les fichiers JSON (= tableau de chaines)
111 $albumsJSON = $Album->readAll(); 110 $albumsJSON = $Album->readAll();
112 // noms des fichiers JSON 111 // noms des fichiers JSON
113 $albumNamesJSON = $Album->getFileList(); 112 $albumNamesJSON = $Album->fileList;
114 113
115 // changer les chaines JSON en tableaux: titre, année, pochette 114 // changer les chaines JSON en tableaux: titre, année, pochette
116 $i = 0; 115 $i = 0;
@@ -124,13 +123,15 @@ function discoEdit($numArticle, $suppression)
124 $annees[$i] = $albumsJSON[$i][1]; 123 $annees[$i] = $albumsJSON[$i][1];
125 $i++; 124 $i++;
126 } 125 }
126 print_r($albumsJSON);
127 //exit();
127 // tri d'un tableau multidimensionnel 128 // tri d'un tableau multidimensionnel
128 array_multisort($annees, $albumsJSON); 129 array_multisort($annees, $albumsJSON);
129 130
130 // on passe maintenant au contenu HTML 131 // on passe maintenant au contenu HTML
131 $Album->setFormat('html'); 132 $Album->format = 'html';
132 $Album->makeFileList(); 133 $Album->makeFileList();
133 $albumNamesHTML = $Album->getFileList(); 134 $albumNamesHTML = $Album->fileList;
134 135
135 // lien vers le HTML ou ancre? 136 // lien vers le HTML ou ancre?
136 // pour chaque album, détecter le fichier html 137 // pour chaque album, détecter le fichier html
@@ -149,6 +150,7 @@ function discoEdit($numArticle, $suppression)
149 if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) 150 if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html'))
150 { 151 {
151 $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; 152 $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0];
153 $lienBoutonModif[$i] = 'discographie&action=edition&album_code=' . $nomJSONsansExt;
152 $avecLien[$i] = true; 154 $avecLien[$i] = true;
153 } 155 }
154 else 156 else
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index d07f2a2..2b9f168 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -52,28 +52,15 @@ function submitCKeditor($nomFichier)
52 exit(); 52 exit();
53 } 53 }
54 54
55 // sécurité faille XSS avec htmLawed
56 $configHtmLawed = array(
57 'safe'=>1, // protection contre les élements et attributs dangereux
58 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées
59 'deny_attribute'=>'id', // gêner le JS hostile
60 // on garde 'class' et 'style' utilisés par le ckediteur
61 );
62 $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs
63
64 // de l'éditeur 55 // de l'éditeur
65 if(isset($_POST['contenu'])) // optionnel pour discographie 56 if(isset($_POST['contenu'])) // optionnel pour discographie
66 { 57 {
67 $contenu = $_POST['contenu']; 58 $contenu = Security::secureString($_POST['contenu']);
68 59
69 // récupérer les liens multimedia 60 // récupérer les liens multimedia
70 //require("media.php"); 61 //require("media.php");
71 //$contenu = mediaSubmit($contenu); 62 //$contenu = mediaSubmit($contenu);
72 63
73 $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed);
74 // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur)
75 $contenu = trim($contenu);
76
77 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !! 64 // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !!
78 if($page != 'discographie' && $contenu == '') 65 if($page != 'discographie' && $contenu == '')
79 { 66 {
@@ -82,18 +69,11 @@ function submitCKeditor($nomFichier)
82 } 69 }
83 } 70 }
84 71
85
86 if($page == 'discographie') 72 if($page == 'discographie')
87 { 73 {
88 $titre = $_POST['titre']; 74 $titre = Security::secureString($_POST['titre']);
89 $annee = $_POST['annee']; 75 $annee = Security::secureString($_POST['annee']);
90 $pochette = $_FILES['upload']['name']; 76 $pochette = $_FILES['upload']['name'];
91
92 // des formulaires simples
93 $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed);
94 $titre = trim($titre);
95 $annee = htmLawed($annee, $configHtmLawed, $specHtmLawed);
96 $annee = trim($annee);
97 77
98 // on instancie avec l'enfant de OneArticle 78 // on instancie avec l'enfant de OneArticle
99 $Album = new Album($page); 79 $Album = new Album($page);
@@ -103,7 +83,7 @@ function submitCKeditor($nomFichier)
103 { 83 {
104 // page disco 84 // page disco
105 $Album->createVignette($titre, $annee, $pochette); 85 $Album->createVignette($titre, $annee, $pochette);
106 86
107 // page de l'album 87 // page de l'album
108 if(!empty($_POST['contenu'])) 88 if(!empty($_POST['contenu']))
109 { 89 {
@@ -125,7 +105,7 @@ function submitCKeditor($nomFichier)
125 // autres pages 105 // autres pages
126 else 106 else
127 { 107 {
128 $Article = new OneArticle($page); 108 $Article = new Page($page, 'html');
129 109
130 if($_GET['article'] == 0) 110 if($_GET['article'] == 0)
131 { 111 {
@@ -133,7 +113,7 @@ function submitCKeditor($nomFichier)
133 } 113 }
134 else 114 else
135 { 115 {
136 $Article->setFileName($nomFichier); 116 $Article->fileName = $nomFichier;
137 $Article->update($contenu); 117 $Article->update($contenu);
138 } 118 }
139 } 119 }
diff --git a/controller/visitor.php b/controller/visitor.php
index a5bf538..0e79ee2 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -33,8 +33,9 @@ function melaineVisitor()
33 $title = "Mais qui est Melaine Favennec?"; 33 $title = "Mais qui est Melaine Favennec?";
34 34
35 // modèle 35 // modèle
36 $Articles = new AllArticles($page_actuelle); 36 $Articles = new Page($page_actuelle, 'html');
37 $Articles->makeFileList(); 37
38 // récupération de toute la page dans $articles
38 $articles = array_reverse($Articles->readAll()); // lourd 39 $articles = array_reverse($Articles->readAll()); // lourd
39 40
40 // variables $css, $js, $header et $content 41 // variables $css, $js, $header et $content
@@ -53,9 +54,9 @@ function discoVisitor()
53 $AllAlbums->makeFileList(); 54 $AllAlbums->makeFileList();
54 55
55 // contenu de tous les fichiers JSON (= tableau de chaines) 56 // contenu de tous les fichiers JSON (= tableau de chaines)
56 $albumsJSON = $AllAlbums->readAll(); 57 $albumsJSON = array_reverse($AllAlbums->readAll());
57 // noms des fichiers JSON 58 // noms des fichiers JSON
58 $albumNamesJSON = $AllAlbums->getFileList(); 59 $albumNamesJSON = $AllAlbums->fileList;
59 60
60 // changer les chaines JSON en tableaux: titre, année, pochette 61 // changer les chaines JSON en tableaux: titre, année, pochette
61 $i = 0; 62 $i = 0;
@@ -74,9 +75,9 @@ function discoVisitor()
74 array_multisort($annees, $albumsJSON); 75 array_multisort($annees, $albumsJSON);
75 76
76 // on passe maintenant au contenu HTML 77 // on passe maintenant au contenu HTML
77 $AllAlbums->setFormat('html'); 78 $AllAlbums->format = 'html';
78 $AllAlbums->makeFileList(); 79 $AllAlbums->makeFileList();
79 $albumNamesHTML = $AllAlbums->getFileList(); 80 $albumNamesHTML = $AllAlbums->fileList;
80 81
81 // lien vers le HTML ou ancre? 82 // lien vers le HTML ou ancre?
82 // pour chaque album, détecter le fichier html 83 // pour chaque album, détecter le fichier html
@@ -121,8 +122,7 @@ function album($albumCode, $albumName)
121 $page_actuelle = 'discographie'; 122 $page_actuelle = 'discographie';
122 $title = $albumName; 123 $title = $albumName;
123 124
124 //$Album = new OneArticle ($page_actuelle); 125 $album = Album::readOneAlbum($albumCode); // simple, efficace
125 $album = OneArticle::readOneAlbum($albumCode);
126 126
127 // variables $css, $header et $content 127 // variables $css, $header et $content
128 require('view/album.php'); 128 require('view/album.php');