#ENV

  • Apparu en : SPIP 1.8

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.

Voetnoot

[1Om veiligheidsredenen zal #ENV nooit variabelen genaamd PHPSESSID of met een naam beginnend met var_ (zoals var_mode en var_profile) weergeven.

[2bekijk een eenvoudig formulier:

<form method="get">
<input type="text" name="test" value="#ENV{test}"> <input type="submit">
</form>
#ENV{test}<br />
#ENV*{test}<br />
#ENV**{test}<br />

in dit formulier zetten we in het veld test: <?php echo date('Y-m-d'); ?> en we valideren.

-  #ENV{test} retourneert (HTML-bron): &lt;?php echo date('Y-m-d'); ?&gt;
-  #ENV*{test} retourneert (HTML-bron): &lt;?php echo date('Y-m-d'); ?>
-  #ENV**{test} retourneert (HTML-bron): 2009-02-12 dus de uitgevoerde PHP.

Auteur Hanjo Gepubliceerd op:

Vertalingen: عربي, català, English, Español, français, Nederlands, русский, Türkçe, українська