Correction faille CSRF

This commit is contained in:
fredtempez 2019-01-04 23:27:35 +01:00
parent 1fc8061236
commit 547693709e
2 changed files with 45 additions and 36 deletions

View File

@ -75,33 +75,43 @@ class page extends common {
* Suppression * Suppression
*/ */
public function delete() { public function delete() {
// $url prend l'adresse sans le token
$url = explode('&',$this->getUrl(2));
// La page n'existe pas // La page n'existe pas
if($this->getData(['page', $this->getUrl(2)]) === null) { if($this->getData(['page', $url[0]]) === null) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'access' => false 'access' => false
]); ]);
} }
// Impossible de supprimer la page d'accueil // Impossible de supprimer la page d'accueil
elseif($this->getUrl(2) === $this->getData(['config', 'homePageId'])) { elseif($url[0] === $this->getData(['config', 'homePageId'])) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2), 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
'notification' => 'Impossible de supprimer la page d\'accueil' 'notification' => 'Impossible de supprimer la page d\'accueil'
]); ]);
} }
// Impossible de supprimer une page contenant des enfants // Jeton incorrect
elseif($this->getHierarchy($this->getUrl(2))) { elseif($_GET['csrf'] !== $_SESSION['csrf']) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2), 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
'notification' => 'Suppression non autorisée'
]);
}
// Impossible de supprimer une page contenant des enfants
elseif($this->getHierarchy($url[0])) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
'notification' => 'Impossible de supprimer une page contenant des enfants' 'notification' => 'Impossible de supprimer une page contenant des enfants'
]); ]);
} }
// Suppression // Suppression
else { else {
$this->deleteData(['page', $this->getUrl(2)]); $this->deleteData(['page', $url[0]]);
$this->deleteData(['module', $this->getUrl(2)]); $this->deleteData(['module', $url[0]]);
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl(false), 'redirect' => helper::baseUrl(false),
@ -111,7 +121,6 @@ class page extends common {
} }
} }
/** /**
* Édition des blocs * Édition des blocs
*/ */

View File

@ -13,7 +13,7 @@
<div class="col2 offset6"> <div class="col2 offset6">
<?php echo template::button('pageEditDelete', [ <?php echo template::button('pageEditDelete', [
'class' => 'buttonRed', 'class' => 'buttonRed',
'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2), 'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2) . '&csrf=' . $_SESSION['csrf'],
'value' => 'Supprimer', 'value' => 'Supprimer',
'ico' => 'cancel' 'ico' => 'cancel'
]); ?> ]); ?>