PHP Manual
/
Zabezpečenie

Funkcia eval() v jazyku PHP

16. 02. 2020

Funkcia `eval` sa používa na vykonanie odovzdaného reťazca ako kódu PHP.

Návrh jazyka PHP a praktické funkcie

PHP je interpretovaný jazyk, čo znamená najmä to, že jeho kód vyhodnocuje interpreter, špeciálny typ programu, ktorý číta napísaný kód a vyhodnocuje ho priamo z reťazca v reálnom čase. Ostatné jazyky (napríklad C) sa musia pred spustením skompilovať do strojového kódu.

Keďže PHP je interpretované, existuje spôsob, ako zmeniť, čo presne sa bude vyhodnocovať za behu, a dokonca aj dynamicky kompilovať kód, čo je presne to, na čo slúži funkcia eval().

Používajte na vlastné riziko!

Funkciu eval používajte len vtedy, keď presne viete, čo robíte! To znamená najmä to, že ste skontrolovali všetky vstupy používateľov a nemôže dôjsť k narušeniu bezpečnosti. Ak sa totiž používateľovi podarí prepašovať svoj reťazec do funkcie eval, bude vyhodnotený ako skutočný kód a môže napríklad vymazať celú stránku, ukradnúť databázu alebo získať kontrolu nad celým serverom.

Príklad z reálneho sveta

Neexistuje veľa dobrých príkladov, kde by sa dalo použiť eval, pretože prakticky vždy existuje lepší spôsob riešenia problému.

Možno ho použiť napríklad pri vyhodnocovaní výrazov:

// Dotaz používateľa
$query = '5 + 3 * 2';
// Spracujte výraz ako regulárny kód PHP
eval('$result = @(' . $query . ');');
// Výpis premennej s riešením výrazu
echo $result; // vypíše 11

Podrobnosti nájdete v Kalkulátor v PHP: Spracovanie matematického výrazu ako reťazca.

Použitie na vykresľovanie šablón

Niekedy sa eval používa na vyhodnotenie vygenerovaného kódu, typicky skompilovaných šablón.

Ako však bolo spomenuté, každý prípad sa dá riešiť inak a lepšie a v tomto prípade je rozumnejšie uložiť serializovanú šablónu do samostatného súboru PHP a načítať ju pomocou require alebo include. Okrem toho, že máte plnú kontrolu nad obsahom šablóny, zostane aj fyzicky na disku, čo podporuje vyšší výkon aplikácie vďaka možnosti ukladania do vyrovnávacej pamäte.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
7.

V jiných jazycích

Status:
All systems normal.
2024