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 12:33 | Nová verze

Byla vydána nová verze 2.10.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP. Přehled novinek i s náhledy v oznámení o vydání a v souboru NEWS. Zdůraznit lze možnost psaní textů vertikálně nebo filtr pro vytváření obrázků typu Little Planet. Vývojáři zdůrazňují překlad GIMPu do maráthštiny. GIMP je tak k dispozici již v 81 jazycích.

Ladislav Hagara | Komentářů: 0
dnes 12:00 | Nová verze

Vyšla verze 5.17 prohlížeče map a GPS logů GPXSee. Nová verze přináší zejména podporu HiDPI displejů a map, a podporu pro další dva formáty souborů - SLF a LOC.

Martin Tůma | Komentářů: 0
18.8. 22:22 | Nová verze

Po roce vývoje od vydání verze 1.20 byla vydána verze 1.21 knihoven EFL (Enlightenment Foundation Libraries). Do vývoje EFL se zapojilo 96 vývojářů. Provedeno bylo téměř 5 000 commitů.

Ladislav Hagara | Komentářů: 0
16.8. 19:00 | Nová verze

Byla vydána verze 18.08.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 0
16.8. 18:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 155. brněnský sraz, který proběhne v pátek 17. srpna od 18:00 na zahrádce restaurace Tanganika (Horova 35). V případě nepřízně počasí uvnitř. Tentokrát bude sraz pojat tématicky. Vzhledem k blížícímu se 50. výročí invaze vojsk Varšavské smlouvy do Československa proběhne malá výstava. Kromě literatury budou k vidění též originály novin z 21. srpna 1968, dosud nikde nezveřejněné fotky okupovaného Brna a původní letáky rozdávané v ulicích.

Ladislav Hagara | Komentářů: 0
16.8. 01:00 | Komunita

Měsíc po Slackware slaví 25 let také Debian. Přesně před pětadvaceti lety, 16. srpna 1993, oznámil Ian Murdock vydání "Debian Linux Release".

Ladislav Hagara | Komentářů: 10
15.8. 06:00 | Nová verze

Byla vydána nová verze 1.26 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Představení novinek také na YouTube.

Ladislav Hagara | Komentářů: 28
15.8. 03:00 | Nová verze

Po více než 3 měsících vývoje od vydání verze 2.12.0 byla vydána nová verze 3.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 169 vývojářů. Provedeno bylo více než 2 300 commitů. Přehled úprav a nových vlastností v seznamu změn. Proč verze 3.0.0 a ne 2.13.0? Není to kvůli triskaidekafobii. QEMU letos v březnu slavilo 15 let od oznámení verze 0.1 a to je dle vývojářů dobrý důvod pro novou major verzi. Vývojáři mají v plánu zvyšovat major verzi jednou ročně, vždy s prvním vydáním v daném roce.

Ladislav Hagara | Komentářů: 3
14.8. 22:11 | Bezpečnostní upozornění

Intel potvrdil (INTEL-SA-00161) další bezpečnostní problém ve svých procesorech. Problém byl pojmenován L1 Terminal Fault aneb L1TF. Popis problému přímo od Intelu na YouTube. Jedná se o CVE-2018-3615 (SGX), CVE-2018-3620 (OS/SMM) a CVE-2018-3646 (VMM). Další informace na stránce Foreshadow nebo přímo v dnešním commitu do Linuxu.

Ladislav Hagara | Komentářů: 19
14.8. 12:33 | IT novinky

Po více než 4 letech bylo vydáno RFC 8446 popisující verzi 1.3 protokolu TLS (Transport Layer Security). Popis novinek i historie TLS například v příspěvku na blogu Cloudflare.

Ladislav Hagara | Komentářů: 0
Používáte zařízení („chromebook“, „chromebox“ či tablet) s ChromeOS?
 (7%)
 (3%)
 (14%)
 (76%)
Celkem 215 hlasů
 Komentářů: 10, poslední 18.8. 11:25
    Rozcestník

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

    3.9.2009 23:21 | Přečteno: 2822× | 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.