Az eval() használatának veszélyei
A nemrégiben napvilágra került PHP XML-RPC hibák arra voltak visszavezethetőek, hogy a különböző kódkönyvtárakban használt XML-RPC értelmező kódok nem túl okosan használták az
Using Eval in PHP című blog bejegyzésében rámutat arra, hogy három fő felhasználási módja terjedt el az
Tehát összességében nagyon trükkös dolgokat tesz lehetővé az
■ eval()
függvényt működésük során, és ez széles biztonsági kapukat tárt a szkriptekben. Az eval()
nagyon csábító, számos lehetőséget ad a fejlesztők számára, elsősorban dinamikus szerkezetű programok kialakítására. Joshua Eichorn blogjában próbált meg rávilágítani a biztonsági és teljesítmény kockázatokra, melyeket érdemes meggondolnunk.Using Eval in PHP című blog bejegyzésében rámutat arra, hogy három fő felhasználási módja terjedt el az
eval()
-nak.- Egyrészt lehetőséget ad arra, hogy kompatibilitást biztosító elemként használjuk, azaz például karaktersorozatban adjuk meg a PHP 5 kulcsszavakat is használó kódot, melyet csak a megfelelően aktuális PHP verzió használata esetén hajtunk végre, elkerülve a régebbi PHP-k által generált feldolgozási hibát. Ha nincs ilyen kulcsszó problémánk, akkor egy egyszerű feltételesen definiált kódszakasz is megoldást ad, így könnyen elkerülhetjük az
eval()
-t.
- Futásidőben tudunk különböző osztályokat és függvényeket definiálni, például egy SOAP-on keresztül távol definiált eljárás beburkolására. Itt nagyon körültekintőeknek kell lennünk az elnevezések ellenőrzésekor, hiszen a metódus nevek dinamikusan adódnak.
- Végül változó érték alapján történő függvényhívásra is használatos az
eval()
, ám ezt teljesen elkerülhetjük, hiszen a PHP beépített függvényekkel rendelkezik ennek támogatására.
Tehát összességében nagyon trükkös dolgokat tesz lehetővé az
eval()
, ám célszerű kerülni a használatát legalábbis biztonsági okok miatt. Azok számára, akiknek a sebesség is fontos, Joshua ennek ellenőrzésére szolgáló teszteket is bemutat, melyek világosan láthatóvá teszik, hogy az eval()
ráadásul igen lassú is.
csiga
Felhő
Soha
Dinamikus modul-betöltés
És kész a modulbetöltö. Ha megcsinálod hozzá a depencency-vizsgálatokat is, akkor pillanatok alatt készen vannak nagyobb rendszerek anélkül, hogy foglalkoznod kellene azzal, hogy hány és milyen modulokat pakolsz bele. Csak szép sorjában írogasd meg öket.
ProClub
proclub##kukac##karinthy.hu
minek eval?
bbalint
Tipikus rossz példa
Tipikusan rossz használata az eval-nak, mint ahogy bbalint már rá is világított. Plussz még csak annyit, hogy az ilyen kód mellett még az is tipikus, hogy az fbasename URL-ből jön, nincs rendesen ellenőrzive, és máris ott figyelsz egy security értesítőben.
Felhő