Changeset 114272 in spip-zone


Ignore:
Timestamp:
Mar 2, 2019, 8:37:44 PM (6 months ago)
Author:
maieul@…
Message:

maintenant qu'on a un vrai parseur pour l'évaluation des conditions en php, il n'est pas la peine de remettre un vérificateur de sécurité, puisqu'on ne fait plus de eval() direct

Location:
_plugins_/saisies/trunk
Files:
1 deleted
1 edited

Legend:

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

    r113994 r114272  
    206206                if (isset($saisie['options']['afficher_si'])) {
    207207                        $condition = $saisie['options']['afficher_si'];
    208                         // Si tentative de code malicieux, on rejete
    209                         if (!saisies_verifier_securite_afficher_si($condition)) {
    210                                 spip_log("Afficher_si malicieuse : $condition", "saisies"._LOG_CRITIQUE);
    211                                 $condition = '$ok';
    212                         }
    213208                        // Est-ce uniquement au remplissage?
    214209                        if (isset($saisie['options']['afficher_si_remplissage_uniquement'])
     
    269264}
    270265
    271 /**
    272  * Vérifie qu'on ne tente pas de faire executer du code PHP en utilisant afficher_si.
    273  * N'importe quoi autorisé entre @@ et "" et ''
    274  * Liste de mot clé autorisé en dehors
    275  * @param string $condition
    276  * @return bool true si usage légitime, false si tentative d'execution de code PHP
    277  */
    278 function saisies_verifier_securite_afficher_si($condition) {
    279         $autoriser_hors_guillemets = array("!", "IN", "\(", "\)", "=", "\s", "&&", "\|\|");
    280         $autoriser_hors_guillemets = "#(".implode($autoriser_hors_guillemets, "|").")#m";
    281 
    282         $entre_guillemets = "#(?<guillemet>(^\\\)?(\"|'|@))(.*)(\k<guillemet>)#mU"; // trouver tout ce qu'il y entre guillemet, sauf si les guillemets sont échapés
    283         $condition = preg_replace($entre_guillemets, "", $condition);//Supprimer tout ce qu'il y a entre guillement
    284         $condition = preg_replace($autoriser_hors_guillemets, "", $condition);//Supprimer tout ce qui est autorisé hors guillemets
    285         if ($condition) {//S'il restre quelque chose, c'est pas normal
    286                 return false;
    287         }
    288         //Sinon c'est que c'est bon
    289         return true;
    290 }
    291266
    292267/**
Note: See TracChangeset for help on using the changeset viewer.