[spip-dev] Dans le fond ...

Bonsoir

Je m'interroge sur cet extrait de recuperer_fond de inc/utils:

  if (isset($contexte['fond'])
   // securite anti injection pour permettre aux plugins de faire
   // des interfaces avec simplement recuperer_fond($fond,$_GET);
   AND $contexte['fond']!==_request('fond'))
    $fond = $contexte['fond'];

est-ce seulement dû au fait que dans balises.php balise_INCLUDE l'appele avec un argument vide:

  "recuperer_fond('',

Si oui, il vaudrait mieux changer cet appel à la compil, car on peut avoir des situations où il existe un paramètre fond qui à la même valeur mais ne représente pas un danger, et c'est alors incompréhensible pour l'auteur du squelette.

Committo,Ergo:Sum

Bonsoir

Je m'interroge sur cet extrait de recuperer_fond de inc/utils:

  if (isset($contexte['fond'])
   // securite anti injection pour permettre aux plugins de faire
   // des interfaces avec simplement recuperer_fond($fond,$_GET);
   AND $contexte['fond']!==_request('fond'))
    $fond = $contexte['fond'];

est-ce seulement dû au fait que dans balises.php balise_INCLUDE l'appele avec un argument vide:

"recuperer_fond('',

Plus exactement, c'est du au fait qu'à un moment recuperer_fond a été modifié pour que le paramètre passé en contexte soit prioritaire quel que soit la valeur de $fond dans le premier argument.

Du coup un une url du type
?page=trucautorisé&fond=chemin/vers/fond/qui/divulgue/des/infos&...
ou dans ecrire
ecrire/?exec=execlegitime&fond=chemin/vers/fond/qui/divulgue/des/infos&...

permet, sans la sécurité ci-dessus, de hacker
- le premier include qui passe {env} dans un squelette
- ou le premier recuperer_fond("monfond",$_GET); dans le php

pour lui faire inclure n'importe quoi.

Si oui, il vaudrait mieux changer cet appel à la compil, car on peut avoir des situations où il existe un paramètre fond qui à la même valeur mais ne représente pas un danger,

Comment faire la différence, dans ce cas ? Comment être sûr que le 'fond' ne vient pas de l'url ?

et c'est alors incompréhensible pour l'auteur du squelette.

Cédric

Je ne comprends toujours pas. A la compil, #INCLUDE doit forcément contenir "fond=", il suffit de prendre le code compilé qui lui correspond, et de le coller comme premier argument de recuperer_fond non ?

Committo,Ergo:Sum

oui, cela assurera que dans les cas limites, le fond sera bon quand même avec #INCLURE
Mais il faut aussi traiter <INCLURE>.

Dans tous les cas, cela n'évite pas de garder la sécurité, mais permet que, lorsqu'elle s'applique, cela n'aura pas d'impact dans les cas légitimes.

Cédric