diff --git a/CHANGES.md b/CHANGES.md index e1a6c91c..43ae8d78 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Corrections : - Thème : déformation des images en arrière-plan dans les modes responsives cover et contain lorsque la longueur de la page change. L'image en arrière-plan est désormais placée dans la balise html et l'option fixe s'active lorsque cover ou contain sont sélectionnés. - Thème : déformation du sélecteur de fichiers dans certains formats de page. - Module Form : mauvais affichage du guillemet et de l'apostrophe dans les noms des champs lors de l'édition. + - Thème : faille CSRF, protection de la réinitialisation des fichiers de thème. - Modifications : - Filtrage des URL générées par facebook (FBCLID) occasionnant une erreur 404 - Captcha arithmétique, activation recommandée dans la configuration. diff --git a/core/module/theme/theme.php b/core/module/theme/theme.php index a1820966..ff7c231e 100755 --- a/core/module/theme/theme.php +++ b/core/module/theme/theme.php @@ -533,31 +533,43 @@ class theme extends common { * Réinitialisation de la personnalisation avancée */ public function reset() { - // Supprime le fichier de personnalisation avancée - $redirect =''; - switch ($this->getUrl(2)) { - case 'admin': - $this->initData('admin'); - $redirect = helper::baseUrl() . 'theme/admin'; - break; - case 'manage': - $this->initData('theme'); - $redirect = helper::baseUrl() . 'theme/manage'; - break; - case 'custom': - unlink(self::DATA_DIR.'custom.css'); - $redirect = helper::baseUrl() . 'theme/advanced'; - break; - default : - $redirect = helper::baseUrl() . 'theme'; - } + // $url prend l'adresse sans le token + $url = explode('&',$this->getUrl(2)); - // Valeurs en sortie - $this->addOutput([ - 'notification' => 'Réinitialisation effectuée', - 'redirect' => $redirect, - 'state' => true - ]); + if ( isset($_GET['csrf']) + AND $_GET['csrf'] === $_SESSION['csrf'] + ) { + // Réinitialisation + $redirect =''; + switch ($url[0]) { + case 'admin': + $this->initData('admin'); + $redirect = helper::baseUrl() . 'theme/admin'; + break; + case 'manage': + $this->initData('theme'); + $redirect = helper::baseUrl() . 'theme/manage'; + break; + case 'custom': + unlink(self::DATA_DIR.'custom.css'); + $redirect = helper::baseUrl() . 'theme/advanced'; + break; + default : + $redirect = helper::baseUrl() . 'theme'; + } + + // Valeurs en sortie + $this->addOutput([ + 'notification' => 'Réinitialisation effectuée', + 'redirect' => $redirect, + 'state' => true + ]); + } else { + // Valeurs en sortie + $this->addOutput([ + 'notification' => 'Jeton incorrect' + ]); + } } diff --git a/core/module/theme/view/admin/admin.php b/core/module/theme/view/admin/admin.php index 134e4bba..46c20ff3 100755 --- a/core/module/theme/view/admin/admin.php +++ b/core/module/theme/view/admin/admin.php @@ -16,7 +16,7 @@
'buttonRed', - 'href' => helper::baseUrl() . 'theme/reset/admin', + 'href' => helper::baseUrl() . 'theme/reset/admin' . '&csrf=' . $_SESSION['csrf'], 'value' => 'Réinitialiser', 'ico' => 'cancel' ]); ?> diff --git a/core/module/theme/view/advanced/advanced.php b/core/module/theme/view/advanced/advanced.php index c13fbd91..f1895306 100755 --- a/core/module/theme/view/advanced/advanced.php +++ b/core/module/theme/view/advanced/advanced.php @@ -10,7 +10,7 @@
helper::baseUrl() . 'theme/reset/custom', + 'href' => helper::baseUrl() . 'theme/reset/custom' . '&csrf=' . $_SESSION['csrf'], 'class' => 'buttonRed', 'ico' => 'cancel', 'value' => 'Réinitialiser' diff --git a/core/module/theme/view/manage/manage.php b/core/module/theme/view/manage/manage.php index 68de0814..42658cd9 100755 --- a/core/module/theme/view/manage/manage.php +++ b/core/module/theme/view/manage/manage.php @@ -11,7 +11,7 @@
'buttonRed', - 'href' => helper::baseUrl() . 'theme/reset/manage', + 'href' => helper::baseUrl() . 'theme/reset/manage' . '&csrf=' . $_SESSION['csrf'], 'value' => 'Réinitialiser', 'ico' => 'cancel' ]); ?>