From 187952ce85e73b52c2753f2d54fc2c44807b8f79 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Wed, 14 Aug 2019 17:03:38 +0200 Subject: [PATCH] centraliser les tests identiques c'est plus simple a mainteanir --- ecrire/inc/meta.php | 2 +- ecrire/inc/securiser_action.php | 18 ++++++++++-------- ecrire/inc/utils.php | 16 +++++++++++++--- ecrire/index.php | 32 +++++++++++++++++--------------- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php index 55d3a323fd..ee27199260 100644 --- a/ecrire/inc/meta.php +++ b/ecrire/inc/meta.php @@ -32,7 +32,7 @@ function inc_meta_dist($table = 'meta') { // en cas d'install ne pas faire confiance au meta_cache eventuel $cache = cache_meta($table); - if ((_request('exec') !== 'install' or !test_espace_prive()) + if ((!$exec = _request('exec') or !autoriser_sans_cookie($exec)) and $new = jeune_fichier($cache, _META_CACHE_TIME) and lire_fichier_securise($cache, $meta) and $meta = @unserialize($meta) diff --git a/ecrire/inc/securiser_action.php b/ecrire/inc/securiser_action.php index 385fcb5c5c..5869ae6c5a 100644 --- a/ecrire/inc/securiser_action.php +++ b/ecrire/inc/securiser_action.php @@ -184,14 +184,16 @@ function caracteriser_auteur($id_auteur = null) { function _action_auteur($action, $id_auteur, $pass, $alea) { static $sha = array(); if (!isset($sha[$id_auteur . $pass . $alea])) { - if (!isset($GLOBALS['meta'][$alea]) and _request('exec') !== 'install') { - include_spip('inc/acces'); - charger_aleas(); - if (empty($GLOBALS['meta'][$alea])) { - include_spip('inc/minipres'); - echo minipres(); - spip_log("$alea indisponible"); - exit; + if (!isset($GLOBALS['meta'][$alea])) { + if (!$exec = _request('exec') or !autoriser_sans_cookie($exec)){ + include_spip('inc/acces'); + charger_aleas(); + if (empty($GLOBALS['meta'][$alea])){ + include_spip('inc/minipres'); + echo minipres(); + spip_log("$alea indisponible"); + exit; + } } } include_spip('auth/sha256.inc'); diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 522a9eb8d9..e786a3aaa6 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -1644,14 +1644,24 @@ function find_all_in_path($dir, $pattern, $recurs = false) { /** * Prédicat sur les scripts de ecrire qui n'authentifient pas par cookie + * et beneficient d'une exception + * * @param string $nom + * @param bool $strict * @return bool */ -function autoriser_sans_cookie($nom) { +function autoriser_sans_cookie($nom, $strict = false) { static $autsanscookie = array('install', 'base_repair'); - $nom = preg_replace('/.php[3]?$/', '', basename($nom)); - return in_array($nom, $autsanscookie); + if (in_array($nom, $autsanscookie)) { + if (test_espace_prive()){ + include_spip('base/connect_sql'); + if (!$strict or !spip_connect()){ + return true; + } + } + } + return false; } /** diff --git a/ecrire/index.php b/ecrire/index.php index a1f4d9d6e4..ddc116c305 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -41,7 +41,7 @@ $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec // Les scripts d'insallation n'authentifient pas, forcement, // alors il faut blinder les variables d'URL // -if (autoriser_sans_cookie($exec)) { +if (autoriser_sans_cookie($exec, false)) { if (!isset($reinstall)) { $reinstall = 'non'; } @@ -64,20 +64,22 @@ $forcer_lang = true; if (_request('action') or _request('var_ajax') or _request('formulaire_action')) { - // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires - include_spip('public/aiguiller'); - if ( - // cas des appels actions ?action=xxx - traiter_appels_actions() - or - // cas des hits ajax sur les inclusions ajax - traiter_appels_inclusions_ajax() - or - // cas des formulaires charger/verifier/traiter - traiter_formulaires_dynamiques() - ) { - exit; - } // le hit est fini ! + if (!autoriser_sans_cookie($exec)){ + // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires + include_spip('public/aiguiller'); + if ( + // cas des appels actions ?action=xxx + traiter_appels_actions() + or + // cas des hits ajax sur les inclusions ajax + traiter_appels_inclusions_ajax() + or + // cas des formulaires charger/verifier/traiter + traiter_formulaires_dynamiques() + ){ + exit; + } // le hit est fini ! + } } // securiser les redirect du back-office if (_request('redirect')) { -- GitLab