abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 10:22 | Bezpečnostní upozornění

Analytici Avastu objevili malware s označením Cosiloon předinstalovaný na několika stovkách modelů telefonů s Androidem (141 nejvíce postižených), včetně produktů od ZTE, Archos a myPhone. Většina těchto zařízení není certifikovaná Googlem. Cosiloon funguje tak, že webovou stránku v prohlížeči překrývá reklamou. Je aktivní více než tři roky a je obtížné jej odstranit, protože je nainstalován na úrovni firmwaru.

Ladislav Hagara | Komentářů: 1
dnes 01:00 | Zajímavý software

Jade Desktop Environment aneb pouze Jade (Just Another Desktop Environment) je linuxové desktopové prostředí postaveno nad webovými technologiemi, tj. Webkit2, Python, HTML5, CSS a JavaScript. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv2.0. Videoukázka na YouTube. Autorem Jade je Vitor Lopes.

Ladislav Hagara | Komentářů: 0
včera 13:44 | Zajímavý článek

Glenn 'devalias' Grant publikoval na svém blogu příspěvek věnovaný reverznímu inženýrství USB. Příspěvek obsahuje celu řadu odkazů na potřebný software a hardware, jakož i odkazy na hackery věnující se reverznímu inženýrství a odkazy na další zajímavé články.

Ladislav Hagara | Komentářů: 2
včera 12:11 | Nová verze

Byla vydána verze 10.8 a krátce na to opravná verze 10.8.1 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
26.5. 10:44 | Komunita

Společně s openSUSE Conference 2018 probíhá dnes v Praze na Fakultě informačních technologií ČVUT jednodenní seminář CryptoFest 2018 (Twitter). Přednášky lze sledovat online na YouTube nebo na CCC.

Ladislav Hagara | Komentářů: 3
26.5. 02:22 | Komunita

Barton George, zakladatel a vedoucí projektu Sputnik, představil na svém blogu čtyři nové mobilní pracovní stanice Dell Precision s předinstalovaným Ubuntu. Jedná se o modely 3530, 5530, 7530 a 7730. Mobilní pracovní stanice budou certifikovány pro RHEL 7.5.

Ladislav Hagara | Komentářů: 11
26.5. 01:11 | Nová verze

Vyšla verze 5.12 prohlížeče map a GPS logů GPXSee. Nová verze přidává podporu Garmin JNX map a přináší mírné zlepšení výkonu/UX.

Martin Tůma | Komentářů: 0
25.5. 12:11 | Komunita

V Praze na Fakultě informačních technologií ČVUT probíhá openSUSE Conference 2018. Přednášky lze sledovat také online. Aktuální dění lze sledovat na Twitteru. Stisknutím zeleného tlačítka bylo dnes dopoledne vydáno openSUSE Leap 15.0.

Ladislav Hagara | Komentářů: 14
25.5. 11:44 | Komunita

Na Steamu probíhá do 28. května akce s názvem Spring Cleaning (Jarní úklid). V rámci akce lze hrát hry Don't Starve Together, Cities: Skylines, Tyranny, Borderlands 2, Middle-earth: Shadow of Mordor a Left 4 Dead 2 běžící na Linuxu zdarma [GamingOnLinux].

Ladislav Hagara | Komentářů: 3
24.5. 23:23 | Humor

Nová služba České pošty nazvaná Bezpečné úložiště nabízí až 100GB kapacitu pro "bezpečnou správu Vašich dat pod patronací důvěryhodného partnera Česká pošta".

… více »
Lol Phirae | Komentářů: 57
Používáte pro některé služby inetd?
 (35%)
 (23%)
 (42%)
Celkem 158 hlasů
 Komentářů: 5, poslední 22.5. 16:46
    Rozcestník

    Řešení třetí programátorské hádanky aneb jak napadnout web

    3.9.2009 23:21 | Přečteno: 2813× | poslední úprava: 11.12.2010 12:16

    Třetí programátorská hádanka byla trochu složitější, tak jsem se rozhodl vše objasnit v extra článku. Vlastní hádanku naleznete zde.

    Co udělá nulový znak při ukládání souboru

    Když zadává útočník název souboru, může zadat např. toto:

    skript.php%00

    kde to %00 znamená nulový znak - znak s ASCII hodnotou nula. Co se v takovém případě stane?

    PHP, stejně jako prakticky každý skriptovací jazyk, bere řetězec jako objekt. Tedy nějaké pole znaků a číslo udávající délku tohoto pole (řetězce). Nulový znak v takové reprezentaci nemá nějaké zvláštní postavení - pracuje se s ním stejně jako s jiným a většinou to ničemu nevadí. Z pohledu PHP tedy nebude název končit „.php“, ale „php\x00“.

    Jiné je to při zápisu do souboru. Zápis do souboru je systémové volání a je nutno zavolat funkce jádra na otevření souboru. Všechna jádra současných rozumně používaných systémů jsou psané v Céčku (popř. C++) a očekávají „céčkovou“ reprezentaci řetězce. Tedy ukazatel někam do paměti, kde je posloupnost bajtů ukončených nulovým znakem. V praxi to probíhá tak, že prostě PHP alokuje někde paměť, tam překopíruje tu svoji reprezentaci řetězce, na konec hodí nulu a tenhle buffer předá jádru.

    A tady je kámen úrazu. Pokud je nulový znak už v řetězci, PHP ho zkopíruje jako každý jiný znak, avšak jádro se při hledání konce názvu zastaví už na něm (namísto na tom koncovém). Takže se název zkrátí. Schválně si zkuste spustit kód

    #!/usr/bin/php
    
    <?php
     $nazev = "soubor.php\x00.txt";
     if (SubStr($nazev,-4) == '.txt')
         File_Put_Contents($nazev,'hack :-)');
    ?>

    Co se stane? Ověří se, že soubor končí na „.txt“, ale na disku vznikne soubor „soubor.php“. Pěkné, že? :-) Takto se dají krásně obejít i kontroly, končí-li např. název na .jpg atd.

    Jak tomu zabránit?

    Předně, není dobré zapisovat soubory tam, odkud by byly spustitelné. Dále není dobré soubory ukládat pod jejich správným názvem, protože kromě bezpečnosti to nemusí být praktické, často je lepší jako jméno volit např. nějaký hash a metainformace, jako je název nebo typ, ukládat např. do databáze. A za další, vždy platí zlaté pravidlo: nezakazujte věci, které se udělat nesmí (blacklist), ale naopak jen povolte věci, o kterých víte, že jsou bezpečné (whitelist). V tomto případě by se asi jednalo o regulární výraz na jasně danou množinu znaků.

    Poslední možností je prostě zkontrolovat název souboru na přítomnost nulového znaku. Popravdě, nikdy jsem neviděl, že by toto bylo někdy explicitně ošetřeno. Nicméně při správně nastaveném serveru by nemělo hrozit žádné riziko.

    Gratulace a další chyby v kódu

    Na tuto chybu jako první v komentářích upozornil AraxoN - gratuluji :-)

    Další bezpečnostní chybou, kterou tento kód má, že povoluje zapsání souboru .htaccess. Pokud je jeho použití na serveru povoleno, lze pomocí něj definovat libovolné soubory jako PHP skripty, např. takto:

    AddType application/x-httpd-php .txt

    Tato chyba mě předtím nenapadla, díky za upozornění darkovi.

    Pokud by server běžel na Windows, bylo by potřeba vyřešit ještě dvě chyby:

    Anketa

    Mimochodem, spousta z vás hlasovala v anketě, že příklad je lehký, i když se ještě v diskusi neobjevila žádná správná odpověď. Zvláštní :-) Zeptám se proto ještě jednou (a odpovídejte po pravdě ;-)):

    Zranitelnost odstraněna (aktualizace 11. 12. 2010)

    PHP od verze 5.3.4 by už nemělo připustit jakoukoli operaci se souborem majícím v názvu nulový znak. Tato zranitelnost je tedy již odstraněna.        

    Hodnocení: 83 %

            špatnédobré        

    Anketa

    Přišli byste na tuto chybu sami?
     (10 %)
     (3 %)
     (79 %)
     (8 %)
    Celkem 101 hlasů

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    3.9.2009 23:30 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Další bezpečnostní chybou, kterou tento kód má, že povoluje zapsání souboru .htaccess. Pokud je jeho použití na serveru povoleno, lze pomocí něj definovat libovolné soubory jako PHP skripty, např. takto
    AddType application/x-httpd-php .txt
    I když je povoleno, nemusí být AddType v .htaccess účinné. Záleží na způsobu zpracování PHP serverem.
    Quando omni flunkus moritati
    Josef Kufner avatar 4.9.2009 00:34 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Mimochodem, spousta z vás hlasovala v anketě, že příklad je lehký, i když se ještě v diskusi neobjevila žádná správná odpověď. Zvláštní :-) Zeptám se proto ještě jednou (a odpovídejte po pravdě ;-)
    To protože nechtěli kazit zábavu těm později čtoucím ;-)
    Hello world ! Segmentation fault (core dumped)
    4.9.2009 00:49 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Já v tom prakticky hned viděl ten zápis .htaccessu, to kouzlo s nulovým znakem je novinka.

    Stejně si ale nedovedu představit, že by jenom trošku rozumně navržená webová aplikace tímhle vůbec mohla trpět.
    ~ w w w w (oo)   [oo] w w w w ~
    xvasek avatar 4.9.2009 08:54 xvasek | skóre: 21 | blog: | Zlín
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    Přesně to mě napadlo taky - kontrolovat příponu v linuxu? (Jinak - abych nemachroval - bych na ten exploit samozřejmě nepřišel.)

    Josef Kufner avatar 4.9.2009 19:19 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Příloha:
    Tak schválně...
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 4.9.2009 19:20 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Ach jo :-(
    Hello world ! Segmentation fault (core dumped)
    4.9.2009 19:41 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Čekal jste, že Javovský server ten PHP skript zpracuje, nebo že se urazí a přestane odpovídat?
    AraxoN avatar 4.9.2009 20:22 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    :-D hehe

    A fine is a tax for doing wrong. A tax is a fine for doing well.
    Josef Kufner avatar 4.9.2009 21:02 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Tak za pokus to stálo, ne ? :-D
    Hello world ! Segmentation fault (core dumped)
    Marek Bernát avatar 4.9.2009 23:10 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Abíčko nebeží na apachi, ale na nejakom javovskom servere? Btw, netuším, ako súvisí jazyk serveru s kódom súboru. Server len obslúži HTTP požiadavok, to kto ho spracuje, je úplne šumák (hoci by som sa veľmi čudoval, keby mal ábičkovský server nastavené obsluhovania PHP skriptov :-) )
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    AraxoN avatar 4.9.2009 23:41 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    Response Headers:

    ...
    Server: Jetty(6.1.11)
    
    200 OK

    Takže nie, abíčko nebeží na Apachi.

    A fine is a tax for doing wrong. A tax is a fine for doing well.
    Marek Bernát avatar 5.9.2009 00:19 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Hm dík, to nebola otázka na to, či je to pravda -- to už dosť zjavne plynie z kolegovho príspevku --, ale _prečo_ nie Apache. Celkom by ma zaujímalo, či je to len tak, alebo z nejakého dôvodu (výkon, integrácia s javou, niečo iné...).
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    5.9.2009 09:55 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Abíčko používá Java Servlet technologii, takže je potřeba nějaký java servlet container. No a protože servlet container Jetty je zároveň webovým serverem a má HTTP část dostatečně kvalitní, je zbytečné mu předřazovat ještě nějaký jiný HTTP server, který by sloužil jenom jako proxy. No a rozchodit na Jetty PHP není úplně snadné, a protože by to bylo v případě Abíčka (i jiného serveru napsaného v Javě) zbytečné, proč by to někdo dělal?
    Luboš Doležel (Doli) avatar 5.9.2009 11:03 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Rozchodit nad Jetty PHP v CGI režimu je naopak velmi snadné. FastCGI taky jde, ale je to o něco složitější.
    Luboš Doležel (Doli) avatar 5.9.2009 17:14 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Pro případ, že by to někdo hledal. Nakonec to fastCGI ani není o nic složitější.
    5.9.2009 21:41 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Kdybych já chtěl provozovat PHP na Javě, asi bych šel do něčeho trochu jiného :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Luboš Doležel (Doli) avatar 5.9.2009 22:04 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Wow, to musím vyzkoušet.
    Luboš Doležel (Doli) avatar 5.9.2009 23:00 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Tak je to fajn, ale characterEncoding=ISO_8859_1, co to dává do JDBC connection stringu, když se v PHP volá mysql_connect, to je konec.
    6.9.2009 00:09 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Já to nikdy nezkoušel, jenom vím, že to existuje, ale když teď koukám na zdrojáky, vypadá to docela hackovatelně. A mělo by to umět použít konexi z JNDI, takže při použití v aplikáči (nebo i v tom Tomcatu, který konexe přes JNDI vystavit umí) by neměl být problém.
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    6.9.2009 00:17 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Ale při pohledu na com.caucho.quercus.lib.db.Mysqli to vypadá, že tam s kódováním znaků skutečně něco šaší:
    // Explicitly indicate that we want iso-8859-1 encoding so
    // we would know what encoding to use to convert StringValues
    // to Strings
    // php/140b 
    Tak nevím. Hádám, že je asi trápí jiné věci, než internacionalizace, ale hádám, že hacknout by to šlo (kdyby se upravila i ta část, která converts StringValues to Strings).
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Luboš Doležel (Doli) avatar 6.9.2009 11:50 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Tváří se, jak jsou totálně unicode, a pak tam vhodí tohle. To teda fakt nechápu.
    protected static final String ENCODING = "ISO8859_1";
    Marek Bernát avatar 5.9.2009 11:58 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    O ten Apache mi šlo preto, že je obecne považovaný za veľmi výkonný server a dobre škáluje. Určite aj preňho existuje nejaký Java modul, veľmi by som sa čudoval, keby nie. Veď máme aj mod_lisp :-) Takže tipujem, že to Jetty je tam preto, že je to default voľba, nie preto, že by niekto testoval rozdiel vo výkone oproti Apachu?

    To PHP som spomínal len z toho dôvodu, že jazyk servera a jazyk, ktorým sa spracúvajú skripty nijak nesúvisia. Pokojne môžete cez Jetty servovať len PHP. Praktickú otázku nasadenia PHP pre abíčko (čo je úplná blbosť) som samozrejme nemyslel :-)

    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    Limoto avatar 5.9.2009 12:34 Limoto | skóre: 32 | blog: Limotův blog | Prostějov
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

     

    O ten Apache mi šlo preto, že je obecne považovaný za veľmi výkonný server a dobre škáluje.

    To je vtip?

     

    Marek Bernát avatar 5.9.2009 12:37 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Nie.
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    default avatar 5.9.2009 16:21 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    Ale je! Sám jsem v dobách pokusů s Java EE napsal servlet pro servírování statického obsahu. A na správně nastaveném Glassfishi jsem dosahoval desetinásobně lepších výkonů. A to je celý HTTPD napsaný v C. :-D Pravda, Apachí web server byl trošku v nevýhodě, ale koho to dnes zajímá. :-D

    5.9.2009 12:52 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Pro Apache žádný Java modul neexistuje, pouze může předávat požadavky dál servlet kontejneru. Buď přes binární protokol AJP13, který má problémy se zpětnou kompatibilitou a autoři Jetty jej nedoporučují, nebo jako klasický HTTP požadavek. Apache sám by mohl obsloužit těch pár statických souborů, které na Abíčku jsou, tj. styly a nějaké obrázky. Vše ostatní by stejně musel předávat Jetty. Z toho je snad jasné, že přidání jedné zbytečné mezivrstvy výkonu určitě neprospěje, spíš naopak.

    Java na serveru se používá vždy, když je serverová aplikace napsaná v Javě (jinak to ani nejde), naopak se asi málokdy používá varianta, kdy by byl Javovský server, který by ale fungoval jenom jako obyčejný HTTP server. Já jsem to tak sice dlouho používal (a po zjištění, že Apache dnes neumí prakticky nic nového proti počátkům verze 2.0, kdy jsem jej používat přestal, se k tomu zase brzy vrátím), ale to jsem asi dost výjimka. Takže webserver napsaný v Javě v drtivé většině případů znamená také serverovou aplikaci napsanou v Javě, takže se to běžně zaměňuje.
    Marek Bernát avatar 5.9.2009 16:04 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    Aha, ďakujem za objasnenie. Netušim som, že Apache nemá žiadny modul pre Javu. To všetci používajú Jetty? Alebo sú aj iné možnosti?

    Asi máte pravdu, že pre jazyky, ktoré len nespracúvajú skripty, ale skutočne bežia ako celistvá aplikácia je výhodnejšie mať špecializovaný server priamo v jazyku (napríklad aj Seaside to tak má, ak sa nemýlim).

    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    Luboš Doležel (Doli) avatar 5.9.2009 16:07 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Jinou možností je třeba Apache Tomcat. Používat nejavovský HTTP server pro Java aplikaci je prostě hloupost.
    5.9.2009 16:17 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Jetty, Tomcat, Resin a spousta dalších. Takový „modul pro Javu“ by stejně musel řešit meziprocesovou komunikaci (spouštět JVM pro každý požadavek by nebylo dobré, a JVM si jako knihovnu uvnitř Apache taky spustíte těžko) a samotný servlet kontejner je docela komplexní věc, která se stejně musí starat o protokol HTTP, spojení atd. Takže udělat z toho plnohodnotný server je v podstatě prkotina, a mít k tomu nějaký předřazený server je pak vlastně zbytečné.
    4.9.2009 20:28 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Kvík?
    ~ w w w w (oo)   [oo] w w w w ~
    4.9.2009 08:35 dementni.lojzik
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Nicméně při správně nastaveném serveru by nemělo hrozit žádné riziko. ... i když se ještě v diskusi neobjevila žádná správná odpověď
    ne ze bych tady tem vecem rozumel, ale vybavuju si, ze kdysi jsem cetl v knizce Zranitelny kod (ci tak nejak se to jmenovalo) prave o teto chybe. Autor upozornuje na nebezpeci nuloveho znaku, ale jestli se dobre pamatuju, tak to bere spis jako chybu ve webovem serveru nez v programu (ve smyslu, ze je tohle je taky dobre osetrit, protoze ve web serveru to osetreno byt nemusi). Treba proto nikdo neodpovedel spravne, protoze tohle vetsina lidi nepovazovala primarne za chybu v programu (tohle byl treba muj pripad, ale ja ani nehlasoval v ankete)
    4.9.2009 10:46 l4m4
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Chybu bych ošetřil, i kdyby mě nenapadla, protože používám konzervativní whitelisty. Nemá smysl hledat všechny možné chyby v kódu, který je na první pohled nedostatečně defensivní...
    4.9.2009 10:52 Kvakor
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Já osobně to řeším tak, že nikdy neukládám soubory pod názvem, který dodá uživatel, ale vygeneruju si vlastní (např. přes funkci tempnam()). Název dodaný užibvatelem uložím někde bokem a to jen v tom případě, že se bude později potřebovat (třeba při downloadu) a to až po "odprasení" - odstranění všech znaků, které by mohly být problematické, povolená jsou jen malá písmeba, podtržítko, mínus a tečka. A pokud je to možné, ukládám soubory mimo adresáře přístupné webserveru, takže cokoliv, co je v nich, nemůže být ani spuštěno, ani staženo bez dovolení.
    4.9.2009 11:54 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Podla mna ide o chybu v PHP - je jasne, ze sa toto stane VZDY, tak to ma mat osetrene a neakceptovat NULLove znaky v nazvoch suborov. Napriklad toto urobi Python:
    >>> nazov = "test.txt\x00"
    >>> file_obj = open(nazov, "w")
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: file() argument 1 must be encoded string without NULL bytes, not str
    
    4.9.2009 15:40 razor | skóre: 33
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web

    Též bych řekl, že by to high level jazyky měly nějak ošetřovat. On vůbec ten null znak je dost podivna věc, která má IMHO smysl jen v C.

    Marek Bernát avatar 4.9.2009 23:18 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Keď už sme pritom, tak znaky nie sú čísla a high level jazyk by ich vôbec nemal takto implementovať. Okrem toho, že to prináša takéto chyby, tak je to zviazané s ASCII kódovaním, čo je ďalšia nepríjemná vec.
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    vlastikroot avatar 5.9.2009 00:21 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Budiz bohuslavena utf8 :-D Ale souhlasim s tim, ze string by mel byt neco abstraktniho, bez jakehokoli vlivu toho jake znaky v nem jsou. Ta fopen by mela nebezpecne znaky ignorovat. Nejhorsi na tom je to, jak jsou ty obycejne nulou koncene stringy zazrane v systemu. Tyhle koule na noze se unix asi nezbavi ...
    Sg1-game | We will destroys the Christian's legion ... and the cross, will be inverted | IP 80.188.182.6
    4.9.2009 17:45 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Souhlas. Kdo to reportuje? :-)
    ~ w w w w (oo)   [oo] w w w w ~
    6.9.2009 16:43 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Nema vyznam, pretoze PHP developeri toto povazuju za 'feature' :)
    4.9.2009 21:26 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Tak to je pro mě novinka, u php bych tohle chování nečekal, u C by mě to možná napadlo. Ale pořád mi nejdou z hlavy dvě tečky - co když by tam někdo procpal něco jako ../neco.xyz?
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    Aleš Janda avatar 4.9.2009 21:28 Aleš Janda | skóre: 21 | blog: kýblův blog | Kralupy nad Vltavou
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Tam by neprošlo to lomítko ;-)
    4.9.2009 22:10 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    Kdybych já si ten kód přečet pořádně... Z jakéhosi důvodu jsem myslel, že to testuje lomítko na začátk. A myslet znamená...
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    Aleš Janda avatar 11.12.2010 12:17 Aleš Janda | skóre: 21 | blog: kýblův blog | Kralupy nad Vltavou
    Rozbalit Rozbalit vše Re: Řešení třetí programátorské hádanky aneb jak napadnout web
    PHP od verze 5.3.4 by už nemělo připustit jakoukoli operaci se souborem majícím v názvu nulový znak. Tato zranitelnost je tedy již odstraněna.

    Upozornění jsem do článku již doplnil.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.