Útoky na web? – Object serialization is not supported by class
- Alsatian
- Člen | 177
Ahoj.
Mám na Vás dotaz, se kterým si prozatím nevím rady. Poslední dobou se mi napříč weby (Nette 4) stává, že mi tu a tam přijde tato chyba. Je miminálně podivné, co se tam „někdo“ snaží vecpat za data, viz odkaz, který chybu vyvolal. Setkává se s tím taky někdo z vás?
Je řešení v ošetření chyby viz nedávný článek „Atribut
#[Requires]“?
Atribut
#[Requires]
Výpis chyby (jen s pozměněnou doménou):
Díky moc.
- Alsatian
- Člen | 177
Martin Dřímal napsal(a):
Ahoj. Jedná se tedy „jen“ o snahu spustit uvedený kód, který ale díky Nette 4 neprojde? Jak zabránit tomu, aby Tracy odeslala chybu na email? :)
- Gappa
- Nette Blogger | 210
Tak jsem ho prošel a nic zajímavého tam není.
Call stack:
inner-code Nette\ComponentModel\Component::__sleep ()
Jsou tam 3 requesty:
GET
na neexistující akci existujícího presenteru.FORWARD
na:Front:Error:
.FORWARD
na:Front:Error4xx:
.
V mém případě byl problém v tom, že i když jeden presenter byl veřejný, tak Error4xx nebyl (🙄), což způsobovalo tuhle divnou situaci – vyřešeno.
- m.brecher
- Generous Backer | 889
@Alsatian
Teoreticky stačí za vyvolání a uložení exception přidat za svou doménu: /nette.micro/?callback=shell_exec&cmd=cd%20/
Zkoušel jsem také testovat co udělá přidané /nette.micro/?callback=shell_exec&cmd=cd%20/ za doménu, ale request zablokoval v prohlížeči antivir s odkazem na nahlášenou bezpečnostní chybu https://nvd.nist.gov/…E-2020-15227
Zkusil jsem přidat jenom /nette.micro, to antivir pustil a obdržel jsem 404:
Takže je zřejmě takovéto vyvolání micro presenteru, které používají roboti, zablokované 404kou. Mám poslední verzi nette/application 3.2.5. U 404ky by neměl být problém s odesíláním emailů z Tracy. Asi by se tedy Tvůj problém dal vyřešit upgradem na poslední verzi, protože Tobě to vyhazuje jinou výjimku – máš asi jinou verzi nette/application než já.
- Alsatian
- Člen | 177
@mbrecher z chyby jsem vyčetl viz následující a ano, weby padnou
do chyby 404 (a zapíší chybu, o které se bavíme):
Call stack:
Ohledně verze Nette, viz výpis níže, i po composer update mám verzi „nette/application“: „^3.1“, což teda opravdu asi není poslední verze. Kde je potom problém :) Vložím sem celý composer.json
Editoval Alsatian (4. 6. 2024 14:55)
- David Grudl
- Nette Core | 8253
Gappa napsal(a):
Tak jsem ho prošel a nic zajímavého tam není.
Call stack:
inner-code Nette\ComponentModel\Component::__sleep ()
Důležité je, co vede k tomu, že se zavolá tato metoda. Nejspíš se někde volá serializace a jde o to proč.
- Alsatian
- Člen | 177
@DavidGrudl Ahoj Davide.
Prosím tě, můžu ti někam poslat celý kód chyby?
Ty se v něm určitě vyznáš, nechci ho dávat veřejně. Chápu správně,
že z něj by se dalo něco vyčíst?
Děkuji :)
Ale asi bude chyba u mě taky někde v Error Presenteru… Vyhodí to totiž jakákoliv chybná URL.
Requests:
Editoval Alsatian (4. 6. 2024 15:45)
- m.brecher
- Generous Backer | 889
@Alsatian
z chyby jsem vyčetl viz následující a ano, weby padnou do chyby 404 (a zapíší chybu, o které se bavíme):
Z výpisu requestů je vidět, že ErrorPresenter zachycuje bez problémů chybu 404. Můžeme tedy vyloučit že by problém způsobila stará verze nette/application. Problém vzniká někde později – pravděpodobně v ErrorPresenteru, nebo Error4xxPresenteru.
Můžeš poslat zdrojový kód všech error presenterů, které výjimku zpracovávají ?
- David Grudl
- Nette Core | 8253
Alsatian napsal(a):
@DavidGrudl Ahoj Davide.
Prosím tě, můžu ti někam poslat celý kód chyby?
pošli mi to na david@grudl.com
- m.brecher
- Generous Backer | 889
@Alsatian
Dobře odladit Error4xxPresenter tak, aby byl neprůstřelný, spolehlivý a nebyl zdrojem vlastních chyb a současně vykresloval běžný layout webu není úplně jednoduché.
Tvůj Error4xxPresenter dědí z BasePresenteru, který pravděpodobně přidává nějaké komponenty do layoutu. Zde by mohl vzniknout nějaký problém.
Navrhuji:
(a) vydumpuj si pomocí bdump(__METHOD__); kam až zpracování 404 dojde:
- Error4xxPresenter: – startup() + renderDefault()
- BasePresenter – startup() + beforeRender() + createComponent<*>() + …
(b) kdyby Jsi problém nenašel, pošli kód BasePresenteru, popř. layoutu
- David Grudl
- Nette Core | 8253
@Alsatian Už jsem to našel, chybu způsobuje
$presenter->storeRequest()
. Volá se v error presenteru, v tu
chvíli je součástí requestu parametr s presenterem (od tohoto PR). No a
když se serializuje, dojde k té chybě.
Co s tím. Ty si pohlídej, aby se nevolal storeRequest() v error presenteru, protože to reálně opravdu nechceš.
A já zkusím upravit Nette, aby bylo jasnější, co se stalo.
edit: tak jste na to přišli dřív než jsem to dopsal :)
- Gappa
- Nette Blogger | 210
David Grudl napsal(a):
Gappa napsal(a):
Tak jsem ho prošel a nic zajímavého tam není.
Call stack:
inner-code Nette\ComponentModel\Component::__sleep ()
Důležité je, co vede k tomu, že se zavolá tato metoda. Nejspíš se někde volá serializace a jde o to proč.
Je to ten stejný důvod – na neveřejné 404 stránce se volal
$presenter->storeRequest()
a přesměrovávalo se na login
stránku, aby se na ní dalo vrátit… :)
- Alsatian
- Člen | 177
@DavidGrudl @Gappa prosím tě, ještě narážím na webech
v posledních dnech na tuhle chybu:
Nette\Application\BadRequestException: Method OPTIONS is not allowed #405 in
/home/html/multihosting.cz/public_html/domains/nazevdomeny.cz/www/vendor/nette/application/src/Application/UI/Component.php:347
Opět nepochopitelný vstup, zřejmě boot…
https://www.nazevdomeny.cz/wp-json/wp/v2/posts?_fields=content,title,link,date_gmt,modified_gmt&search=href&search_columns=post_content&per_page=100&page=1
„/wp-json/wp/v2/posts?_fields=content,title,link,date_gmt,modified_gmt&search=href&search_columns=post_content&per_page=100&page=1“ vyhodí chybu. Jsem schopen sám nějak zjistit, co ji způsobuje? :)
Nette\Application\BadRequestException #405
Method OPTIONS is not allowed
Skončí to zřejmě na 14-tém řádku v souboru „/www/index.php“:
Editoval Alsatian (30. 6. 2024 8:14)
- Gappa
- Nette Blogger | 210
Alsatian napsal(a):
@DavidGrudl @Gappa prosím tě, ještě narážím na webech v posledních dnech na tuhle chybu:
Nette\Application\BadRequestException: Method OPTIONS is not allowed #405 in /home/html/multihosting.cz/public_html/domains/nazevdomeny.cz/www/vendor/nette/application/src/Application/UI/Component.php:347
`
To bude asi to samé jako tady, ne?
- Alsatian
- Člen | 177
Gappa napsal(a):
Alsatian napsal(a):
@DavidGrudl @Gappa prosím tě, ještě narážím na webech v posledních dnech na tuhle chybu:
Nette\Application\BadRequestException: Method OPTIONS is not allowed #405 in /home/html/multihosting.cz/public_html/domains/nazevdomeny.cz/www/vendor/nette/application/src/Application/UI/Component.php:347
`
To bude asi to samé jako tady, ne?
Dost možná ano. Díky. Snad už bude klid :D