Autor Zpráva
Radovan789
Profil *
Dobrý den,
chci se zeptat jestli je možné převést string (například vypsaný z databáze) do PHP a kód napsaný ve stringu provést. Nemá stím něco společného funkce ob_flush?
ShiraNai7
Profil
Lze, viz:
eval()

Nemá stím něco společného funkce ob_flush?
Ne.
Radovan789
Profil *
jo přesně tohle jsem hledal;) děkuji
Joker
Profil
Radovan789:
je možné převést string (například vypsaný z databáze) do PHP a kód napsaný ve stringu provést
Možné to je, je to ten příkaz eval, ale nikdy by se to nemělo dělat.

edit:
ShiraNai7:
Přijde mi nežádoucí začátečníkovi jen tak poradit eval a nepřidat žádné upozornění nebo informaci o nebezpečnosti toho příkazu.

Viz ostatně i manuál k eval:
The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged.
= Příkaz eval je velice nebezpečný, protože umožňuje spuštění libovolného kódu. Jeho použití proto není doporučeno.
Radovan789
Profil *
Joker:
„nikdy by se to nemělo dělat.“
Dělám to kvuli tomu abych mohl v databázi přidávat vlastní obsah stránek které si pak vypíši, a potřebuji aby na těch stránkách jelo i to PHP. Něco jak to má php-fusion vyřešený u panelů.


Joker:
Příkaz eval je velice nebezpečný, protože umožňuje spuštění libovolného kódu. Jeho použití proto není doporučeno.
Tak pokud jde o zabezpečení aplikace tak o to se opravdu nebojím, to bych pochopil aji bez manuálu.

„začátečníkovi“
asi mě dost dobře znáš ;)
nemeja
Profil
tak zkus použít nějaký šablonovací systém, nebo si vytvořit vlastní. například {menu}, zaměnit pomocí str_replace za kod menu. Nicméně když to budeš spouštět pomocí eval, tak kdokoliv kdo může upravit tu "šablonu", pak může i zároven napsat svuj škodlivý kod a třeba ti smazat DB,...
Radovan789
Profil *
nemeja:
Napsáno hezky ale kničemu, když upravit šablonu budu moct pouze já, nikdo jiný se ktomu prostě nedostane.
Joker
Profil
Radovan789:
To je přesně to, co by se nemělo dělat.
Viz i ten manuál.

Příkaz eval by se v normálním skriptu nikdy neměl vyskytovat právě proto, že jeho jediné smysluplné použití je spuštění nějakého kódu, který dostanu zvenku.
Což je skoro vždycky špatný nápad.
Když budu pokračovat v citaci z toho manuálu:
If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.
Pokud jste si pečlivě ověřili, že není žádná jiná možnost než použít tento příkaz, dejte zejména pozor, abyste mu nikdy neposílali uživatelem zadaná data bez předchozí důkladné validace.

nikdo jiný se ktomu prostě nedostane
A to bude zařízené jak?
Radovan789
Profil *
Joker:
A to bude zařízené jak?
Tak že se ktomu nedostane normální uživatel (vše co cituješ s PHP manuálu se mě netýká), tyto úkony budu moct dělat pouze já přes adminstraci. Mimo jiné zde už je pak důležité zabezpečení proti CSRF.
Joker
Profil
Radovan789:
tyto úkony budu moct dělat pouze já přes adminstraci
Super, to nebude políčko „Zadejte PHP které chcete na serveru provést“ na titulní stránce? Tak to je úleva.
Ne, vážně, to jsem si přesně myslel. Spoléhat na to, že moje aplikace bude neprůstřelně zabezpečená, taky není dobrý nápad.

vše co cituješ s PHP manuálu se mě netýká
Ale týká, je to ukázkový příklad toho, o čem se v manuálu píše.
Podle toho popisu má skript udělat eval něčeho co načetl z databáze, kam to uložila ta webová aplikace a ta to vzala zadáním od uživatele.
Čili ten skript má dělat eval uživatelského vstupu.
Jelikož ten možný vstupní kód je poměrně obecný, udělat na to důslednou validaci bude pěkně složité.
Ovšem dovolím si předpokládat, validaci veškerou žádnou, prostě query, fetch, eval.
Čili eval uživatelského vstupu bez jakékoliv kontroly, přesně to, co i manuál radí v žádném případě nedělat.

Budiž, myslím, že varování už bylo dostatečné.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: