Changeset 117759 in spip-zone


Ignore:
Timestamp:
Sep 6, 2019, 4:37:26 PM (2 months ago)
Author:
maieul@…
Message:

Report r116075
Ne pas permettre en PHP d'executer du code arbitraire via afficher_si
(jusqu'à maintenant possible en rusant sur les tests alternatifs).

Location:
_plugins_/saisies/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/saisies/trunk/inc/saisies_afficher_si_commun.php

    r117739 r117759  
    152152        return $valeur;
    153153}
     154
     155/** Vérifie qu'une condition est sécurisée
     156 * IE : ne permet pas d'executer n'importe quel code arbitraire.
     157 * @param string $condition
     158 * @param array $tests tableau des tests parsés
     159 * @return bool true si secure / false sinon
     160 **/
     161function saisies_afficher_si_secure($condition, $tests) {
     162        $hors_test = array('||','&&','!','(',')');
     163        foreach ($tests as $test) {
     164                $condition = str_replace($test[0], '', $condition);
     165        }
     166        foreach ($hors_test as $hors) {
     167                $condition = str_replace($hors, '', $condition);
     168        }
     169        $condition = trim($condition);
     170        if ($condition) {// il reste quelque chose > c'est le mal
     171                return false;
     172        } else {
     173                return true;
     174        }
     175}
  • _plugins_/saisies/trunk/inc/saisies_afficher_si_php.php

    r117737 r117759  
    133133function saisies_transformer_condition_afficher_si($condition, $env = null) {
    134134        if ($tests = saisies_parser_condition_afficher_si($condition)) {
     135                if (!saisies_afficher_si_secure($condition, $tests)) {
     136                        spip_log("Afficher_si incorrect. $condition non sécurisée", "saisies"._LOG_CRITIQUE);
     137                        return '';
     138                }
    135139                foreach ($tests as $test) {
    136140                        $expression = $test[0];
  • _plugins_/saisies/trunk/tests/saisies_afficher_si/saisies_evaluer_afficher_si.php

    r117740 r117759  
    214214                                1 => '!@plugin:tartempion_de_test@' // en espérant que personne ne nomme un plugin tartempion_de_test
    215215                        ),
     216                        'hack' => array(
     217                                0 => true,
     218                                1 => "spip_log('s') || @input_1@=='s')"
     219                        )
    216220                );
    217221                return $essais;
Note: See TracChangeset for help on using the changeset viewer.