The 2007-11-16 at 12:01 by Loïc d'Anterroches filed under News.
Là, à l’instant, je viens de tomber sur un os. Arg. Je suis en train de développer la génération automatique d’un formulaire à partir d’un modèle. Tout avance bien, sauf un petit bug dans le rendu du formulaire. Je mets donc :
{$form|debug}
dans le code de mon gabarit, histoire d’afficher le contenu du formulaire. Et là… bing : Fatal error: Call to undefined method Pluf_Form_Model. En fait, le gabarit protège automatiquement les variables, donc quand j’inclus ce code dans le gabarit, le code PHP correspondant est :
<?php echo var_export(Pluf_Template_htmlspecialchars($t->_vars['form'])); ?>
Avec Pluf_Template_htmlspecialchars qui va convertir le formulaire en chaîne de caractères et faire les échappements, puis l’export pour afficher le contenu. Cela ne marche donc pas du tout. Il faudrait pouvoir faire un échappement conditionel à la fin et non au début.
Pour le moment, soit {$var|filtre1|filtre2|filtre3}, cela correspond en PHP à echo filtre3(filtre2(filtre1(htmlspecialchars($var)))). Cela permet de faire la chose suivante : {$form|unsafe} qui va échapper le code puis le dééchapper : echo un_htmlspecialchars(htmlspecialchars($var)).
Ce qu’il faudrait, c’est savoir si un filtre ou simplement la fonction __toString d’un modèle retourne une chaîne sûre ou non. On pourrait dire que par défaut une chaîne est non sûre, mais que si la chaîne est en pratique un object Pluf_SafeString alors le contenu est sûre. Donc au lieu de faire un echo à la fin, on aurait un special echo qui automatiquement ferait la vérification et passerait à la moulinette ou pas la chaîne.
Il faut que je regarde de plus près cela…
Comments from readers