Eval() is gevaarlijk

Berekeningen met eval() zijn niet altijd veilig

Gesponsorde koppelingen

Inhoudsopgave

  1. Voorbeeld van een veiligheidslek

 

19 reacties op 'Eval() is gevaarlijk'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppeling

Nibulez
Nibulez
8 maanden geleden
 
0 +1 -0 -1
Natuurlijk is eval(); gevaarlijk, je voert dan regelrecht een php code uit, je kan zorgen dat dit veilig gebeurt maar als iemand hier toch een lek in vind dan ben je screwed.
Flip van Rijn
Flip van Rijn
8 maanden geleden
 
0 +1 -0 -1
Sticky deze tutorial... Eval behoor je eigelijk voor zulke zaken nooit te gebruiken...
Bo az
Bo az
8 maanden geleden
 
0 +1 -0 -1
Belangrijk punt, zeker voor beginners. Toch is eval hier niet het probleem maar user input validatie imho.
Blanche PHP
Blanche PHP
8 maanden geleden
 
1 +1 -0 -1
Ik ben het helemaal met Boaz eens dat eval() hier niet het probleem is. Eval() is net zo gevaarlijk als de beperktheid van de kennis van de gebruiker ervan en daarom is deze korte tutorial goed!

Mensen die roepen dat eval() een slechte functie is die je nooit moet gebruiken, moeten zich misschien toe eens afvragen of die mening wel gegrond is. Als je weet wat je doet kan het zijn dat eval() op een gegeven moment een oplossing biedt (alhoewel ik het zelf nog nooit gebruikt heb). Het advies is dan ook niet 'niet gebruiken' maar 'pas op met het gebruik'...
SanThe Nvt
SanThe Nvt
8 maanden geleden
 
0 +1 -0 -1
@Blanche: Het advies is dan ook niet 'niet gebruiken' maar 'pas op met het gebruik'...

Dat is ook mijn mening. Maar zoals je zelf waarschijnlijk ook regelmatig hebt gezien wordt vaak de input klakkeloos in de eval() gezet. En dat gaat gewoon op een keer fout. Vandaar dit stukje schrijven.
Luuk Schakenraad
Luuk Schakenraad
8 maanden geleden
 
0 +1 -0 -1
Eval zelf is totaal ongevaarlijk. Maar als je het icm met user input gebruikt is het wel gevaarlijk, maar dat is sql zonder validatie ook als er user input wordt gebruikt.
Je moet iig zorgen dat je eval zo min mogelijk gebruikt om deze reden en omdat het redelijk traag is. Probeer altijd een omweg te zoeken door op één of andere manier met een functie te werken die aangeroepen wordt.
Blanche PHP
Blanche PHP
8 maanden geleden
 
0 +1 -0 -1
@SanThe: dat bedoel ik ook met mijn post. Ik ben blij dat je het opgeschreven hebt, dit is zeker handig voor beginners! :)
Niborx Trump
Niborx Trump
8 maanden geleden
 
0 +1 -0 -1
Eval is niet gevaarlijk, je moet gewoon je get/post data filteren?
Nibulez
Nibulez
8 maanden geleden
 
0 +1 -0 -1
@Niborx:
En als een gebruikers of hacker toch een manier vind zodat die filtering geen nut heeft?
Steen
steen
8 maanden geleden
 
0 +1 -0 -1
Gewoon geen eval gebruiken zou ik zeggen, is nergens écht voor nodig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
unlink();
// als je maar rechten genoeg hebt...
?>
Nibulez
Nibulez
8 maanden geleden
 
0 +1 -0 -1
Wat trouwens ook kan gebeuren en waar je bijna niks tegen kunt doen is dat de gebruiker functies uit kan voeren, chmodden, bestanden verwijderen etc.
Blanche PHP
Blanche PHP
8 maanden geleden
 
0 +1 -0 -1
Nibulez:
Wat trouwens ook kan gebeuren en waar je bijna niks tegen kunt doen is dat de gebruiker functies uit kan voeren, chmodden, bestanden verwijderen etc.
Dit is wederom een kwestie van het controleren van user input en heeft dus meer daar mee te maken dan met de functionaliteit van eval() zelf.

Het is dus ook onzin dat je daar 'bijna niets tegen kunt doen'. Het kan juist heel eenvoudig: controleer alle user input goed.
Steen
steen
8 maanden geleden
 
0 +1 -0 -1
Geef één voorbeeld waarbij het noodzakelijk is om eval te gebruiken? Volgens mij zijn er altijd andere oplossingen.
Karl Karl
Karl Karl
8 maanden geleden
 
0 +1 -0 -1
Quote:
steen schreef op 02.01.2010 12:34
Geef één voorbeeld waarbij het noodzakelijk is om eval te gebruiken? Volgens mij zijn er altijd andere oplossingen.

Inderdaad, volgens mij zijn het voornamelijk situatie's waar de scripter te 'lui' is om 'ingewikkelde' oplossingen te maken.
Ik gebruik eval alleen voor een testscriptje, zodat ik niet een nieuwe pagina aan hoef te maken.
Blanche PHP
Blanche PHP
8 maanden geleden
 
0 +1 -0 -1
Quote:
Geef één voorbeeld waarbij het noodzakelijk is om eval te gebruiken? Volgens mij zijn er altijd andere oplossingen.
Zoals ik eerder al zei: ik ben zelf nog nooit zo'n situatie tegengekomen en vraag me ook af of ik het ooit nodig zal hebben.

Maar dan nog, men roept al heel snel dat bepaalde functies niet gebruikt moeten worden zonder daar enige correcte argumentatie voor te geven. Dat is waar ik over val, niet het gebruik van eval().
Nibulez
Nibulez
8 maanden geleden
 
0 +1 -0 -1
Quote:
Dit is wederom een kwestie van het controleren van user input en heeft dus meer daar mee te maken dan met de functionaliteit van eval() zelf.

Het is dus ook onzin dat je daar 'bijna niets tegen kunt doen'. Het kan juist heel eenvoudig: controleer alle user input goed.


Hoe wil je user input controleren op functies, je kan niet elke functie weg gaan filteren, daarnaast kun je zelf ook nog functies maken.
SilverWolf NL
SilverWolf NL
8 maanden geleden
 
0 +1 -0 -1
@Nibulez
Nee, dit kan inderdaad niet, maar je kan wel controleren voor alles wat wel mag. Bijvoorbeeld bij berekeningen, kan je filteren op alle functies die men wel mag gebruiken (denk aan abs(), sqrt(), pow(), sin(), cos() en tan()). Als er dan iets anders in zit, kan je een error teruggeven. Dat is veel sneller dan alles wat men niet mag gebruiken controleren. Verder zou je bij berekeningen intval() kunnen gebruiken, als het om numerieke functies gaat. Dan kan iemand nooit iets met een functie beginnen.
Daniel Voogsgerd
Daniel Voogsgerd
7 maanden geleden
 
1 +1 -0 -1
Het gaat hier toch niet perse om eval() user input moet je altijd controleren op escapen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Details
  • SanThe Nvt
  • 8 maanden geleden
  • 929 x bekeken
  • Labels
  • Geen tags toegevoegd.