Pour réduire le nombre de trous de sécurité, nous avons intégré la librairie safehtml, ça vous le savez sans doute déjà [1]
De sorte que les balises dont le contenu vient de l’extérieur se trouvent « sécurisées » lors de leur affichage sur le site public. Nous voilà donc rassuré-e-s, l’utilisation de #ENV est possible sans danger (du moins, tant que le contraire ne nous a pas été signalé).
Mais, il arrive qu’on ait besoin de transmettre du php ou du javascript quand même via une balise #ENV... Eh oui, même SPIP peut en avoir besoin, c’est le cas de certaines balises dynamiques, connues surtout pour leur emploi dans le cas des formulaires publics.
Or donc, il a été convenu que les balises issues de l’extérieur (via formulaire ou syndication) seraient sécurisées par l’application de filtre automatique (interdire_script, entite_html) de SPIP, mais qu’il serait possible de récupérer le contenu fidèle (ou recalculé) en utilisant la notation #ENV**
. Charge au webmestre de réaliser le filtre de sécurité à appliquer derrière, par exemple |safehtml
.
Exemple :
– écrire [(#ENV{toto})]
au beau milieu de votre squelette affichera le contenu de la variable « toto » qu’on a, soit saisie dans la barre d’adresse de sont navigateur, soit récupérée d’un formuaire de son propre site. Si un utilisateur tente de placer du code malveillant, spip tentera de le repérer et de l’éradiquer. C’est le comportement par défaut.
– [(#ENV{toto}|mon_filtre)]
sera employé par les webmestres désireux de mettre en œuvre des fonctionnalités nécessitant de manipuler la donnée « toto » avant de l’afficher. Le cas le plus simple, il transforme la valeur.
– Mais le filtre gadget peut très bien ajouter un appel à du javascript inséré à l’endroit précis où on affiche le contenu de toto (cas de #FORMULAIRE_FORUM), voire d’insérer du code php directement, pour calculer une valeur à chaque hit, par exemple. Et la, ça ne marche plus, parce que le filtre de sécurité supprimera la possibilité d’exécuter ce code. D’où la notation [(#ENV**{toto}|mon_filtre)]
qui lève la sécurité et affiche le contenu tel quel. À charge pour le webmestre d’intégrer la sécurité dans son filtre.
Exemple de filtre gérant la sécurité :
Messages
5 avril 2006, 16:26, par Natacha C
Bonjour
dans le squelette articles.html j’aimerais pouvoir transformer la variable php
$auteur_session[« login »] en #ENVmonacces afin de pouvoir créer une boucle du genre
je n’y suis pas arrivée malgré la lecture de nombreux post
merci d’avance
Natacha C
PS le post supprime les accolades
1er septembre 2006, 01:09, par marco
salut
voilà déjà quelques heures que je m’échine à passer un filtre à #ENV mais rien n’y fait...
mon filtre est une fonction qui prend une chaîne et renvoie un tableau contenant des chaînes issues d’une table dont la note similar_text est > à un seuil. la fonction est testée en local et elle est stable.
le problème vient donc de la balise et de son filtre :
<BOUCLE_articles(ARTICLES) {titre IN [(#ENV{submit_titre, .*}|chercher_proches)]}
La doc de spip dit expressément qu’on ne peut pas rajouter de code après #ENV...
Alors
[(#ENV{toto}|mon_filtre)]
c’est testé ou c’est en projet pour spip 2.0 ?