SPIP Blog

Du logiciel libre et de la tendresse

Accueil > Développement > #ENV**

#ENV**

mardi 14 mars 2006, par James

La balise ENV, la « sécurité » et comment personnaliser ses squelettes sans prendre le risque de fragiliser son site ...

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é :


[1Sinon, allez voir par là

Messages

  • 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

  • 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 ?

Un message, un commentaire ?

Qui êtes-vous ?
Se connecter
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.