Compare commits

...

2 Commits
master ... v2

  1. 28
      inc/saisies_afficher.php
  2. 2
      paquet.xml

28
inc/saisies_afficher.php

@ -493,7 +493,11 @@ function saisies_verifier_afficher_si($saisies, $env = null) {
foreach ($saisies as $cle => $saisie) {
if (isset($saisie['options']['afficher_si'])) {
$condition = $saisie['options']['afficher_si'];
// Si tentative de code malicieux, on rejete
if (!saisies_verifier_securite_afficher_si($condition)) {
spip_log("Afficher_si malicieuse : $condition", "saisies"._LOG_CRITIQUE);
$condition = '$ok';
}
// Est-ce uniquement au remplissage?
if (isset($saisie['options']['afficher_si_remplissage_uniquement'])
and $saisie['options']['afficher_si_remplissage_uniquement']=='on'){
@ -566,3 +570,25 @@ function saisies_verifier_afficher_si($saisies, $env = null) {
return $saisies;
}
/**
* Vérifie qu'on tente pas de faire executer du code PHP en utilisant afficher_si.
* N'importe quoi autorisé entre @@ et "" et ''
* Liste de mot clé autorisé en dehors
* @param string $condition
* @return bool true si usage légitime, false si tentative d'execution de code PHP
*/
function saisies_verifier_securite_afficher_si($condition) {
$autoriser_hors_guillemets = array("!", "IN", "\(", "\)", "=", "\s", "&&", "\|\|");
$autoriser_hors_guillemets = "#(".implode($autoriser_hors_guillemets, "|").")#m";
$entre_guillemets = "#(?<guillemet>(^\\\)?(\"|'|@))(.*)(\k<guillemet>)#mU"; // trouver tout ce qu'il y entre guillemet, sauf si les guillemets sont échapés
$condition = preg_replace($entre_guillemets, "", $condition);//Supprimer tout ce qu'il y a entre guillement
$condition = preg_replace($autoriser_hors_guillemets, "", $condition);//Supprimer tout ce qui est autorisé hors guillemets
if ($condition) {//S'il restre quelque chose, c'est pas normal
return false;
}
//Sinon c'est que c'est bon
return true;
}

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="saisies"
categorie="outil"
version="2.26.10"
version="2.28.0"
etat="stable"
compatibilite="[3.0.0;3.2.*]"
logo="images/logo_saisie_48.png"

Loading…
Cancel
Save