Het baken [(#ENV{variabele})]
maakt het mogelijk de omgevingsvariabelen van een skelet (de context) op te vragen [1].
Het skelet ontvangt deze variabele ofwel via de URL (het HTTP-verzoek) ofwel van het bestand waarin het is opgenomen (INCLURE), ofwel van een formulier.
Voorbeeld van een variabele in de URL: spip.php?rubrique24&id_mot=5
In rubrique.html zal #ENV{id_mot}
een waarde 5 retourneren.
Voorbeeld bij een INCLURE:<INCLURE{fond=mijn_skelet} {id_article=136}>
In mijn_skelet.html zal #ENV{id_article}
een waarde 136 retourneren.
Standaardwaarde
[(#ENV{variabele, standaardwaarde})]
: heeft een tweede , optionele parameter standaardwaarde waamee kan worden angegeven welke waarde moet worden geretourneerd wanneer de variabele niet bestaat. Het is gelijk aan de syntax [(#ENV{variabele}|sinon{standaardwaarde})]
.
De beveiliging omzeilen
SPIP past standaard de functies interdire_scripts
en entites_html
toe op het baken #ENV
. Zoals bij alle bakens kunnen de automatisch toegepaste bewerkingen worden omzeild met #ENV*
en #ENV**
(je leest alles over het gebruik van * en **, in artikel #BAKEN* en #BAKEN**).
#ENV*
retourneert de variabele zonder toepassing van het filter entites_html
, dus zonder het omzetten van speciale tekens in HTML entiteiten.#ENV**
retourneert de variabele zonder toepassing van de functie interdire_scripts
. Ze stuurt dus de uitgevoerde PHP terug. [2]
Dit kan een veiligheidsrisico met zich meebrengen omdat code geïnjecteerd zou kunnen worden. Daarom wordt interdire_scripts
standaard toegepast om code als <
en andere <script language=php>
uit de variabele te verwijderen.
Toch heeft #ENV**
bij het ontwikkelen van een formulier een toepassing. Het gebruik van de dubbele ster isnodig bij de foutweergave in een CVT-formulier, om bijvoorbeeld de fouttabel op te halen in het skelet van een formulier: #ENV**{erreurs}|tabelwaarde{clef}...
De volledige omgeving weergeven met #ENV
Tijdens de ontwikkeling van een site wil je mogelijk de volledige context zien om te kunnen debuggen:[<pre>(#ENV**|unserialize|print_r{1})</pre>]
Belangrijk: Vergeet vooral niet dit soort veiligheidslekken te verwijderen aan het eind van de ontwikkelingsfase van de site.