Changeset 112879 in spip-zone


Ignore:
Timestamp:
Dec 17, 2018, 8:07:09 PM (4 weeks ago)
Author:
maieul@…
Message:

variable d'anonymisation :

  • code plus clair en évitant de créer des variables juste pour inverser le résultat d'un test, et pour recopier la valeur d'une variable sans la modifier après (!)
  • plus de variables globales pour modifier un réglage (qui de toute facon

aurait du passer plutot par un pipeline dédiée)

  • limiter les cas d'appel a eval()

Compatibilité assuré pour les quelques personnes qui auraient modifiés
ces variables globales (mais qui?)

Location:
_plugins_/formidable/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/inc/formidable.php

    r112878 r112879  
    157157        $cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
    158158
    159         $anonymiser = ($anonymisation == '') ? false : true;
    160         if ($anonymiser) {
    161                 $anonymiser_variable = $anonymisation;
    162         }
    163 
    164159        // traitement de l'anonymisation
    165         if ($anonymiser) {
     160        if ($anonymisation != '') {
    166161                // mod de l'id_auteur
    167                 $variables_anonymisation = $GLOBALS['formulaires']['variables_anonymisation'][$anonymiser_variable];
    168                 $id = eval("return $variables_anonymisation;");
     162                $id = formidable_variable_anonymisation($anonymisation);
    169163                $id_auteur = formidable_scramble($id, $id_formulaire);
    170164        }
     165
    171166        // ni cookie ni id, on ne peut rien faire
    172167        if (!$cookie and !$id_auteur) {
     
    533528        return array($valeurs, $valeurs_libellees);
    534529}
     530
     531/**
     532 * Retourne la valeur de la variable PHP servant à anonymiser.
     533 * pour les deux variables proposés par formidable, recherche directement dans $_SERVER
     534 * sinon utilise un eval() si une autre variable a été défini en global.
     535 * Mais peu probable que le cas se présente, car pas d'interface dans le .yaml pour proposer d'autres variables que celle définies par formidable
     536 * @param string $nom_variable le nom de la variable
     537 */
     538function formidable_variable_anonymisation($nom_variable) {
     539        if (in_array($nom_variable, array("remote_user", "php_auth_user"))) {
     540                $nom_variable = strtoupper($nom_variable);
     541                return isset($_SERVER[$nom_variable]) ? $_SERVER[$nom_variable] : null;
     542        }
     543        return eval("return $nom_variable;");
     544}
  • _plugins_/formidable/trunk/traiter/enregistrement.php

    r112865 r112879  
    2323        if ($options['anonymiser'] == 'on') {
    2424                // mod de l'id_auteur
    25                 $variables_anonymisation = $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
    26                 $id = eval("return $variables_anonymisation;");
     25                $id = formidable_variable_anonymisation($options['anonymiser_variable']);
    2726                $id_auteur = formidable_scramble($id, $id_formulaire);
    2827        }
Note: See TracChangeset for help on using the changeset viewer.