Na navigaci | Klávesové zkratky

Jak zabít procesor

Nedávno jsem uvažoval, jak pracuje takový překladač PHP. Napadlo mě napsat zdrojový kód, který by jej odstřelil. V případě PHP4 se mi to povedlo – stáhněte si a vyzkoušejte tento příklad. PHP5 už umí vstupní data ošetřit lépe a namísto smrti ohlásí Parse error: parser stack overflow (pro pětku použijte upravený příklad).

Na webové prohlížeče lze zaútočit i na další frontě. Například je nechat zobrazit extrémně velký obrázek. Pro experiment bude stačit bitmapa o velikosti např. 1024×768, ke zvětšení použijeme HTML:

<img width="9000000" height="9000000"
src="wallpaper.jpg" />

Jak si s tím poradí trojlístek IE, Firefox a Opera? První dva jmenovaní se pokusí vyhovět zadání a počítač vytíží natolik, že bude připomínat mrtvý stroj (zkuste zarolovat). Opera rozměry zdaleka nedodrží (má limit někde kolem 30.000 pixelů) a k přetížení nedojde. Co je důležité, žádný z prohlížečů nezačne bezhlavě alokovat kvanta paměti a vždy jen přepočítá zobrazovaný výřez.

Můžete si to sami vyzkoušet – ale klikejte jen s vědomím všech rizik!

Ještě dodávám, že testy jsem dělal na Windows 2000 SP4 s Apache 2.0.48, PHP 4.4.0 & 5.0.4, IE 6 SP1, Firefoxem 1.0.4 a Operou 8.01. Jinde se může chování lišit.

Komentáře

  1. Arthur Dent #1

    Což to… Ale já několikrát (nedobrovolně) odstřelil PHP4 rekurzí, kde jsem se třeba uklepl v ukončovací podmínce. Nějak tak:

    function zab($a){
    $b=array();
    for ($i=0;$i<100000;$i++){
    $b[$i]=rand(1,10000);
    }
    if ($a==0) zab ($a++);
    }

    zab(0);

    …a když ten server běží jako localhost, tak to pak stojí za to – člověk vidí, že se neděje to co se dít má, jenže celý počítač je zoufale tuhý a než odstřelíš Apache… :)

    před 19 lety | reagoval [16] Jakub Vrána
  2. Arthur Dent #2

    Pardon, pro hnidopichy dodám, že to není příklad „uklepnutí v ukončovací podmínce“, alébrž „uklepnutí při volání“.

    před 19 lety | reagoval [3] David Grudl
  3. David Grudl #3

    avatar

    #2 Arthure Dente, pro jistotu zde budu demonstrovat oba případy

    uklepnutí při volání

    • zdar ty vole!
    • prosím kdo volá?
    • no volám správně číslo 606918711?
    • ne, to je 606918710
    • jé, pardón, já jsem se uklepl při volání

    uklepnutí v ukončovací podmínce

    • tak si představ, zítra mi končí podmínka!
    • no to je super, jdeš to někam oslavit?
    • ale ne, strašně mě bolí prst, přibíjel jsem hřebík a uklepl se
    před 19 lety | reagoval [4] Arthur Dent
  4. Arthur Dent #4

    #3 Davide Grudle, Nikoli, ten druhý příklad je „uklepnutí při ukončení podmínky“, nikoli „při podmínce ukončení“.

    To je spíš takhle:

    • Tak, mám tu od soudu napsáno, že vám máme zajistit popravu, takže zítra bude váš život ukončen…

    Soudce: – Sakra, uklepl jsem se, mělo být „potravu“…

    před 19 lety
  5. Havran #5

    avatar

    No k tomu druhemu prikladu z obrazkom. Bol som svedkom (na vlastnej kozi) ze PNG o podobnych rozmeroch a 999999×99999 (neviem presne) mi zostrelilo cele WinXP – Firefox 1.0.4 – IE som neskusal. Inak WinXP Pro SP2.

    před 19 lety
  6. pinus #6

    Firefox vykreslil cernou plochu o rozmerech 1024×768. IE6 vytizil procesor na maximum a pri pokusu o zabiti zrestartoval pocitac (WinXP, vc. poslednich zaplat)

    před 19 lety | reagoval [11] David Grudl
  7. pinus #7

    doplneni: Firefox je verze 1.0.5 a nedelo se nic – proste se otevrela stranka s cernym obdelnikem (okamzite, zadne prepocitavani, zadne vytezovani procesoru).

    před 19 lety | reagoval [26] wiki
  8. Havran #8

    avatar

    Este aj linku vam dam – VAROVANIE ulozte si pre istou pracu.

    https://web.archive.org/…tefan.de:80/

    před 19 lety | reagoval [11] David Grudl [38] zajDee
  9. Havran #9

    avatar

    Asi to tam uz opravili. To je fajn – vcera som si ho nainstaloval :).

    před 19 lety | reagoval [26] wiki
  10. Ivan #10

    Php příkladem neodstřeleno (4.3.9) – poslušně vypsalo 1.

    před 19 lety | reagoval [11] David Grudl
  11. David Grudl #11

    avatar

    #6 pinusi, ta černá plocha je nejspíš jeden hodně zvětšený pixel, zkus zarolovat. Jinak w2k to přežili v pohodě – není možné, že restart způsobil nestabilní (přetaktovaný) HW?

    #8 Havrane, to je úplně to stejné – obrázek roztáhnutý do obřích rozměrů

    #10 Ivane, to je zajímavé. Můžeš zkusit příklad pro PHP5 ?


    Jinak v IE můžete (s klidem) vyzkoušet i tuto hříčku, zatímco na tohle rozhodně nedoporučuju klikat.

    před 19 lety | reagoval [16] Jakub Vrána [17] bvj
  12. Petr #12

    avatar

    Fedora Core 3, Firefox 1.0.4: zobrazí se okamžitě v zadaných rozměrech 9000000 × 9000000

    před 19 lety | reagoval [26] wiki
  13. hvge #13

    Myslim ze PHP vie dost dobre odstrelit aj kvantum vygenerovanych chyb (stacia notices). Sice to prezije, ale ako developer sa mi veru nikdy nechce cakat 5 minut, kym mi to ‚vybuble‘ do browseru, preto radsej volim Apache restart :(

    před 19 lety
  14. thingwath #14

    avatar

    U zabíjecího obrázku nemám nejměnší problém. Sice by to mohlo být trochu plynulejší, ale jinak je to úplně v pohodě. Procesor sice pár sekund při natahování počítal, ale jinak vytížení jen malé.

    Firefox Deer Park Alpha 2, Fedora Core 4

    před 19 lety | reagoval [26] wiki
  15. pixy #15

    avatar

    Maxiobrazek + Safari + MacOSX = nulovy problem.

    před 19 lety
  16. Jakub Vrána #16

    Viz též: Top 10 ways to crash PHP

    #1 Arthure Dente, Není nad to testovat skripty spuštěním přes PHP-cli. Člověk se chybu snadno dozví a nemusí nic shazovat.

    #11 Davide Grudle, Mě PHP-cli 4.4.0 i 4.3.10 pod Windows XP také poslušně vypsalo ok.

    před 19 lety | reagoval [19] David Grudl
  17. bvj #17

    #11 Davide Grudle,
    tak u tech dvou linku to nic neudela – tiny firewall ty skripty nepusti

    před 19 lety
  18. bvj #18

    na MSIE 5.5 a 6 funguje tohle

    před 19 lety
  19. David Grudl #19

    avatar

    Na IE 5 (5.5?) stačívalo tohle:

    <input type>

    #16 Jakube Vráno, vážně, PHP-CLI v případě php4killer.php funguje v pohodě a u php5killer.php vypíše korektní Parse Error.

    před 19 lety
  20. anituar #20

    Tu chybu s moc velkym height/weight jsem zkousel na trech pocitacich.
    Vsechny s XPckama. Zkousel jsem FF (1.0.4) i IE (6.0.2900) a v obou modra obrazovka zpusobena ovladacem graficke karty (v jednom pripade integr. Intel, zbyle dva nVidia).

    před 19 lety
  21. Gregor #21

    avatar

    php4-killer.php → vypisalo mi ok.
    mam php 4.3.11 na Mac OS X 10.3.9

    před 19 lety
  22. wiki #22

    no ja jsem toho taky svedkem. xp sp 2 + firefox 1.04 chvili nic a pak jsem uvidel blue screen of dead.

    před 19 lety | reagoval [25] wiki
  23. charlie #23

    Mno, vy vsichni kterym to fungovalo, zkouseli jste ten obrazek scrollovat? Me se pod Firefoxem 1.0.4 totiz taky moc hezky a moc rychle nacet, ale scrollovani melo za nasledek obrazovku barvy zname zhruba jako #0000FF..

    před 19 lety
  24. charlie #24

    A kolega se stejnou konfiguraci me koukam predbeh:/ To mam z toho ze jeste napul spim a pisu pomalu:/

    před 19 lety
  25. wiki #25

    #22 wiki, uz jsem prisel cim to je ze to usmrti i widle. je to mizernou intelackou grafikou co ma driver ialmrnt5 a ta se vyskytuje na hooodne pc v pracich a skolach

    před 19 lety
  26. wiki #26

    #7 pinusi, #9 Havran tak jsem zkousel Firefox verzi 1.0.5 a nic neopravili, problem je podle me proste ve windowsech a mizernejch driverech ke grafice. to svedci i o tom ze na fedore je to prej ok #14 thingwath #12 Petr.

    před 19 lety
  27. Ebo #27

    jéé… a já čekal článek ve stylu jak přepnout pomocí prográmku napětí Vcore na destrukční výši, či jak nenápadně uživateli na AMDčku vypnout ventilátor a simulovat jeho činnost, aby to kontrolní prográmky neodhalili ?

    před 19 lety
  28. pete #28

    win2k sp4 / p4 2,4 / nvidia:
    opera 8 to zkousla, ale obrázek byl menší. firefox 1.0.4 to vykreslil během chvilky bez vetšího zatížení cpu, při kliknutí na posuvník to všechno „zmrzlo“ a následoval reset. msie 6 to po pár minutách (100% cpu) vykreslil, přepnutí na msie z taskmana a zpátky trvalo další minuty, kliknutí na posuvník způsobí totéž jako u firefoxu

    závěr (nebrat vážně):

    • firefox má s msie hodně společného kódu
    • i stroje schopný zvládnout doom 3 na max. detaily jsou pro surfování naprostý plečky (tak mě napadá, jak by asi dopadnul počítač radka hulána?)

    (kdo bude asi první, komu to dám do msie jako homepage a nepřímo ho tak donutim přejít na lepší browser? ?

    před 19 lety
  29. Radši anonymní ;-) #29

    Já zkusil ten tvůj PHP-Killer na webuzdarma a náhle opravdu nefungují všechny domeny.unas.cz – aspoň co jsem zkoušel. Nevím sice, jestli mou zásluhou, ale snad mě webmaster hned nevyhodí… ?

    před 19 lety
  30. anituar #30

    Jak uz jsem psal, delaji to i drivery od nVidie.
    A co se tyce stroju, byly to vsechno P4, jmenovite 2.4GHz/768MB, 3.0GHz/1024MB a 3.0@3.6GHz/2048MB.

    před 19 lety
  31. lammer #31

    asi tolko, ze toto je old a very old a je to pouzite u jedneho nemca uz niekolko mesiacov! lenze teraz sa to zacalo sirit a uz je pruser. ja som to siril asi rok dozadu ale neslo to az tak humusne jak teraz

    před 19 lety | reagoval [32] Arthur Dent [33] David Grudl
  32. Arthur Dent #32

    #31 lammere, Je to starý, já to šířil už před rokem 1990, ještě na ZX Spectru, ale to se už vůbec nedalo srovnávat!

    před 19 lety
  33. David Grudl #33

    avatar

    #31 lammere, bavíme se o HIV?

    před 19 lety
  34. Michal Illich #34

    Linux (Fedora Core 4) + Mozilla Firefox 1.0.4 to zobrazil okamzite a naprosto korektne (da se scrollovat po celem maxiobrazku).

    před 19 lety
  35. cortez #35

    avatar

    Centrino 1,6, ATI Mobile Radeon 9700, XP SP2+Aktual zaplaty a taky spadly cele…chvili se nic nedelo, totalne zatuhnul a po stisku CTRL+ALT+DEL modrej screen a chyba ovladace grafiky, takže to zdaleka nebude chyba grafáren ale pitomejch XPcek :(( … kdy uz skonci jejich nadvlada … bejt vsechny programy co mam pod Winama pro Linux, tak uz jsem davno na nem :(

    před 19 lety
  36. Petr Souček #36

    avatar

    Tak pro změnu něco jiného – Windows 98 SE + Mozilla SeaMonkey 1.0a, video ATI Rage Xpert 2000 Pro – zobrazí se ihned obrázek 9000000px x 9000000px, celý bílý, jde v pohodě skrolovat vodorovně i svisle, i zobrazit vlastnosti.

    před 19 lety
  37. Petr Souček #37

    avatar

    Tak jsem ještě zkusil Mozillu 1.7.10 a IE 6.0SP1 na stejném stroji a výsledek stejný – ani se nezaškobrtne, roluji, zobrazji vlastnosti obrázku.. ? Opravdu to někde zlobí?

    před 19 lety
  38. zajDee #38

    avatar

    ja zkusil na tu stranku #8 Havran IE6 s poslednimi zaplatami, Firefox 1.0.4 a Operu 8.0, vsechno pod WinXP s poslednimi zaplatami a grafikou ATI Radeon 9600 a jak Mozilla, tak IE shodily pc do BSOD. A to i bez rolovani…

    před 19 lety
  39. t3rb1 #39

    no ja som skusal Firefox 1.0.6 a otvoril som to, zamrzlo to a chvilu nato naskocila BSOD :) nasledoval restart a vytiahnutie sietoveho kabla, bo vo firefoxe mam rozsirenie crash-recovery, po loginuti som pustil ff a vyhodil vsetky panely a potom som uz dalej robil :)

    před 19 lety
  40. t3rb1 #40

    skusal som php4-killer , na najnovsom easyphp, wz.cz a ic.cz a vsade vypisalo ok, takze nejak nefunguje

    před 19 lety
  41. sway #41

    avatar

    Ja vim ze to je mozna trosku pozdni komentar, ale na Linuxu mi se ve FF 1.5 Beta 1 obrazek zobrazil naprosto v pohode:)

    před 19 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.


phpFashion © 2004, 2024 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.