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 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 0
    dnes 19:22 | IT novinky

    Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).

    Ladislav Hagara | Komentářů: 0
    včera 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

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

    Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.

    karkar | Komentářů: 0
    včera 12:11 | Humor

    Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).

    Ladislav Hagara | Komentářů: 7
    včera 10:44 | IT novinky

    Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.

    Ladislav Hagara | Komentářů: 28
    včera 09:55 | IT novinky

    Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.

    Ladislav Hagara | Komentářů: 5
    včera 09:33 | IT novinky

    Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.

    Ladislav Hagara | Komentářů: 0
    včera 08:11 | Nová verze

    Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    29.4. 20:55 | Nová verze

    Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.

    Ladislav Hagara | Komentářů: 0
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (1%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 497 hlasů
     Komentářů: 19, poslední včera 11:32
    Rozcestník

    Programátorská hádanka 3 - bezpečnostní zrada

    2.9.2009 22:28 | Přečteno: 2737× | poslední úprava: 3.9.2009 23:27

    Bezpečnost je značně ošemetná věc, se kterou si nikdy nemůžete být stoprocentně jistí. Poznáte, co je špatně na následujícím kusu PHP kódu? Podotýkám, že se jedná o velice rozšířenou chybu, ale málokdo si ji uvědomuje.

    Mějme webovou aplikaci, kam může uživatel posílat své soubory. Kromě samotného souboru volí i jeho název. Všechny soubory musí být uloženy do adresáře „soubory“. Z nějakého důvodu se v tomto adresáři interpretují PHP skripty, takže je nutno ohlídat, aby soubor neměl příponu „.php“. Kromě toho je třeba hlídat, aby vetřelec nemohl zapsat nic mimo tento adresář.

    Skript je následující:

    function JeBezpecnySoubor($nazev) {
         $malymi = StrToLower($nazev);
         if (SubStr($malymi,-4) == '.php')
             return false;
    
         if (StrPos($malymi,'/') !== false)
             return false;
    
         return true;
     }
    
     if (JeBezpecnySoubor($_GET['nazev_souboru'])) {
         $fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
    
         ...a tak dále :-)
    

    Neuvažujte jiné ošetřované přípony než „.php“ a jiný oddělovač adresářů než lomítko. Server běží na standardním unixovým stroji, ale podobně by to fungovalo prakticky kdekoliv. Neuvažujte jako chybu možnost přepsání souboru. Chyba se netýká žádných speciálních vlastností PHP.

    Aktualizace: Správné řešení jako první objevil AraxoN, jinou chybu objevil dark. Gratuluji :-) Tato hádanka byla myslím celkem těžká, řešení jsem proto popsal v samostatném článku.

           

    Hodnocení: 80 %

            špatnédobré        

    Anketa

    Obsahuje uvedený kód nějakou chybu?
     (0 %)
     (76 %)
     (0 %)
     (24 %)
    Celkem 29 hlasů

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

    Komentáře

    Vložit další komentář

    kouby avatar 2.9.2009 22:38 kouby | skóre: 27 | blog: init | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    V php se moc nevyznám, ale kdyby uživatel poslal soubor s názvem ".." tak dostane zápisové právo do nadřazeného adresáře?

    That's thirty minutes away. I'll be there in ten.
    Aleš Janda avatar 3.9.2009 23:28 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    PHP se v tomto ohledu nechová nijak zvláštně a zápis do souboru „..“ skončí chybou, neboť už existuje takový adresář :-)
    2.9.2009 22:44 blackvladimir | skóre: 4
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    PHP není moje parketa ale neskousne phpkové fopen i backslash? Aspoň u Windows portu by mě to moc nepřekvapilo.
    vlastikroot avatar 2.9.2009 22:48 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Pise ze jina lomitka neberem v uvahu. Nevidim tam zadnou chybu (krome nepouziti basename() pro ziskani jmena), stydim se.
    We will destroys the Christian's legion ... and the cross, will be inverted
    Salamek avatar 2.9.2009 22:54 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Pro detekci formátu souboru bych ještě použil mime_content_type
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Přemek Vyhnal avatar 2.9.2009 23:01 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    nechci to zkoušet, ale nešlo by $_GET['nazev_souboru'] dát třeba "osklivyskript.php?neco=jpg"?

    NO RAPTORS!
    Přemek Vyhnal avatar 3.9.2009 00:02 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    ne, samozřejmě že nešlo ;)

    NO RAPTORS!
    2.9.2009 23:33 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ten skript pustí i takovou věc, jako je už existující soubor. V takovém případě nemá cenu se zabývat dalšími případnými problémy, tohle je nepřípustné samo o sobě.
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Aleš Janda avatar 2.9.2009 23:52 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    To je pravda, to by byla chyba, ale mám na mysli spíše nějakou chybu, při které by se dal napadnout sám server. Příspěvek jsem upravil.
    AraxoN avatar 2.9.2009 23:34 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Ja tam vidím len to, že môže prepísať iné súbory, ktoré tam už sú, ale to asi nebude tá chyba, lebo to by bolo príliš jednoduché. :-)

    2.9.2009 23:53 dark
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Zkusím vylučovací metodu:

    1) Pokud to zde je napsané, asi na tom něco bude, tedy kód není čistý

    2) V podmínce je, že jsou v daném adresáři i skripty (což je na pováženou, ale budiž), takže spuštění skriptu v tom adresáři je podmínka nebezpečnosti

    3) V php nedělám, ale kód nepustí soubor s příponou .php a lomítkem. Nejedná se tedy o bezpečnosti typu přepsání souboru mimo tento adresář (takže riziko se bude odehrávat nejspíš v daném adresáři)

    4) Kód neošetřuje .htaccess, je riziko spojené s tímto?

    Aleš Janda avatar 3.9.2009 00:04 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Ke čtvrtému bodu:
    Wow, soubor .htaccess by to opravdu vzalo a pomocí něj by se např. daly definovat jako PHP skripty i soubory s jinou příponou, které by aplikace pustila. Takže ano, gratuluji, na jednu chybu jste přišel :-)

    Nicméně tuto chybu jsem neměl na mysli, hledejte dál ;-)

    Jardík avatar 3.9.2009 02:32 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    .htaccess může být zakázán na serveru ...
    Věřím v jednoho Boha.
    Josef Kufner avatar 3.9.2009 09:53 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ale prakticky nikdy není. Navíc než ".htaccess" by to chtělo zakázat ".ht*" (kvůli .htpasswd) a nejspíš i všecko začínající tečkou.

    ps: je to celkem lehké, ale pěkně schované ;-)
    Hello world ! Segmentation fault (core dumped)
    Salamek avatar 3.9.2009 14:04 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    je to celkem pěkný bug :-)
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    xkucf03 avatar 3.9.2009 22:49 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Soubor s hesly by měl být někde úplně mimo (třeba v /etc).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Josef Kufner avatar 3.9.2009 23:05 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ehm... asi tak stejně jako by měla být v /etc konfigurace webserveru...
    Hello world ! Segmentation fault (core dumped)
    xkucf03 avatar 3.9.2009 23:17 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Neberu to jako webserver, ale jako webovou aplikaci – tu si můžeš klidně nainstalovat jako baliček systému a je celkem normální, aby měla svůj adresář v /etc, jako všechny ostatní aplikace.

    Pokud je to na webhostingu nebo je potřeba tu aplikaci provozovat ve víc instancích, je spráné, abys měl strukturu třeba:

    /var/www/virtual/nějakáDoména/htdocs/ ← tohle zprístupní apache přes HTTP
    /var/www/virtual/nějakáDoména/etc/ ← tady budou soubory s hesly
    /var/www/virtual/nějakáDoména/dalšíAdresář/ ← třeba zálohy nebo nějaké dočasné soubory

    Každopádně bych dal soubor s hesly mimo adresář, který je zpřístupněný přes HTTP a nespolíhal bych se jen na ochranu pomocí .htaccess nebo dokonce ochranu pomocí aplikace.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Josef Kufner avatar 4.9.2009 00:27 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Pokud děláš nějakou aplikaci o alespoň pár tisících řádcích, tak možná. Ale pokud je to něco malého, nebo jen pár adresářů s omezeným přístupem, tak se prostě udělá .htaccess, vedle se plácne .htpasswd a těch pár lidí pro které to je, jsou spokojení. K vidění to je celkem často právě vedle nějakých aplikací, kde je prostě potřeba si něco položit vedle, mít to zabezpečené, ale přitom se s tím moc nepatlat.
    Hello world ! Segmentation fault (core dumped)
    AraxoN avatar 3.9.2009 01:14 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Tak to asi mám... alebo som objavil ešte nejakú inú chybu. :-D

    Ak $_GET['nazev_souboru'] obsahuje na konci znak \0 (nulový bajt), tak substr() vráti "php\0" a nie ".php", lebo dĺžku reťazca PHP nevedie podľa znaku \0. Naproti tomu fopen() predá parameter volaniu API OS, ktorý je v C-čku, znak \0 pre neho znamená koniec reťazca a všetko počnúc týmto znakom už neberie do úvahy.

    3.9.2009 01:47 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ak je \0 v názve tak to nezoberie a odmietne súbor otvoriť

    Windows orezáva z konca súborov medzery, takže tam by stačilo dať na koniec tie, ale to platí len pre NTFS, ktoré na väčšine serverov nie je (navyše tam kde beží PHP)

    Btw. afaik sa pomocou GET nedajú uploadovať súbory...
    mkoubik avatar 3.9.2009 04:10 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Já tam taky vidim upload null byte, vysvetli mi nekdo proč fuj.php\0.txt neprojde? Nebo od kdy to php zahazuje?
    Josef Kufner avatar 3.9.2009 09:54 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Nejde o php, ale o unix pod tím, ten jak známo omezuje znaky v názvech souborů na cokoliv krom '/' a '\0' – to první odděluje adresáře, to druhé zakončuje stringy v C.
    Hello world ! Segmentation fault (core dumped)
    3.9.2009 08:41 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Btw. afaik sa pomocou GET nedajú uploadovať súbory...

    Ha, on je zásadní rozdíl mezi HTTP metodou GET a PHP proměnnou GET. Ta druhá „funguje“ i u ostatních metod, prostě jsou do ní zpracovány parametry z URL...

    3.9.2009 11:51 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    To je mi jasné, ale v blogu sa spomínal form na upload, tak predpokladám že ten názov súboru sa zadáva do toho istého formu, a nie že sa píše ručne do url...
    3.9.2009 13:00 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    A není to vzhledem k problému úplně fuck?

    3.9.2009 15:00 eoj
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Jednak nevis o cem mluvis a druhak je to prece uplne jedno.
    3.9.2009 15:20 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Tak by si mi aj mohol vysvetliť prečo by som nemal vedieť o čom hovorím, a prečo posielaš presne taký istý komentár aký je hneď nad tvojím...
    4.9.2009 00:38 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    <form action="skript.php?foo=bar" method="post">
    ~ w w w w (oo)   [oo] w w w w ~
    4.9.2009 01:06 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    A ako chceš do toho foo dostať string zadaný do textboxu na tej istej stránke? Cez nejaký javascript možno, ale také riešenie by nikto aspoň trochu normálny nikdy nepoužil...
    4.9.2009 04:09 Eregon | skóre: 22 | blog: Eregonovy_vymysly | Všudezdejší
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    A z čeho že vyplývá ta podmínka, že to musí pocházet ze stejné stránky?
    ~ w w w w (oo)   [oo] w w w w ~
    rADOn avatar 3.9.2009 14:36 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    php 5.2.0 v etchi neodmitne. hezkej bug.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    3.9.2009 15:18 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Njn, tak je to závislé na systéme na ktorom to beží...
    xkucf03 avatar 3.9.2009 23:07 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše POST i GET v jednom

    POST i GET se dají míchat dohromady:

    <?php
    echo ($_REQUEST["foo"] . "<br/>");
    echo ($_REQUEST["bar"] . "<br/>");
    ?>
    
    <form action="hack.php?foo=nazdar" method="post">
    <input type="text" name="bar" value="bazar"/>
    <button>poslat</button>
    </form>
    

    (neřešte validitu HTML, je to jen malý příklad)

    Takže GETem můžeš poslat třeba název souboru a POSTem samotný soubor (ale je otázka, proč by to tak chtěl někdo dělat, když může POSTem poslat všechno).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    xkucf03 avatar 3.9.2009 23:28 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše \0

    Tohle funguje:

    <?php
    $jmeno = "hack.php\0";
    $fp = FOpen($jmeno, "rw");
    $obsah = fread($fp, filesize($jmeno));
    fclose($fp);
    echo(nl2br(htmlspecialchars($obsah)));
    ?>
    

    Výpíše soubor „hack.php“. Ale ta \0 je přímo v PHP kódu, když se ji tam snažíš procpat přes GET, tak se asi někde ztratí.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Aleš Janda avatar 3.9.2009 23:32 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: \0
    Ale ta \0 je přímo v PHP kódu, když se ji tam snažíš procpat přes GET, tak se asi někde ztratí.

    Podle mě se nikde neztratí, pokud přímo do URL dám ?promenna=neco%00neco, tak tam ten nulový bajt opravdu je…
    xkucf03 avatar 3.9.2009 23:34 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: \0

    Tak proč to harovi nefunguje?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    3.9.2009 23:36 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: \0
    Nefungovalo to na windows, tam sa fopen()núť súbor s null znakom v názve nepodarí. Neviem ale prečo to jednoducho nepovažuje za koniec stringu...
    4.9.2009 00:01 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: \0
    Hm, tak to teda nie je tým, a windows ten null znak normálne oreže, ale %00 mi server parsuje na '\0', čiže na "\\0", preto to nebralo...
    Josef Kufner avatar 4.9.2009 00:30 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: \0
    To máš jen zapnuté magic quotes.
    Hello world ! Segmentation fault (core dumped)
    xkucf03 avatar 4.9.2009 11:55 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše …přitom taková blbost.

    FOpen považuje a SubStr nepovažuje – taková blbost, ale kolik to dokáže nadělat škody, co?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Aleš Janda avatar 3.9.2009 23:29 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ano, to je správná odpověď. Gratuluji :-)
    hikikomori82 avatar 3.9.2009 01:27 hikikomori82 | skóre: 18 | blog: foobar | Košice
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ja ked ukladam subory do r/w adresara, tak jedine tak ze meno suboru je serial z nejakej tabulky kde su doplnujuce udaje o tom subore (povodny nazov suboru, velkost, typ, kto ho ulozil, kedy, kde sa pouziva,...), takze taketo veci ani nemusim riesit, ale ako inspiracia OK.
    3.9.2009 08:38 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    IMHO je zásadní chyba, že se testují jen některé části jména. Správný přístup je pomocí regulárních výrazů přesně definovat, jak jméno souboru má vypadat...

    Josef Kufner avatar 3.9.2009 09:55 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Jakmile se v tom regulárním výrazu objeví něco jako '[^/]*', tak je to ekvivalentní tomuto zápisu.
    Hello world ! Segmentation fault (core dumped)
    3.9.2009 13:01 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Jiste, p*čoviny se dají dělat i s pomocí regexp... klidně se tam dá rovnou dát „^.*$“, že ano...

    Josef Kufner avatar 3.9.2009 21:26 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    A jak bys teda ten regexp napsal?
    Hello world ! Segmentation fault (core dumped)
    Aleš Janda avatar 3.9.2009 23:34 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Třeba takto:
    ^[a-z0-9]+\.[a-z0-9]+$
    Ale test na příponu bych musel udělat stejně zvlášť.
    stativ avatar 3.9.2009 09:50 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Střílím od boku, ale nemůže být problém v uvozovkách? Nevidím tam žádné escapování.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    Josef Kufner avatar 3.9.2009 09:56 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Uvozovky jsou v pohodě, ale v závislosti na konfiguraci serveru se v názvu můžou objevit nějaká ta lomítka navíc, což však z pohledu bezpečnosti nijak nevadí.
    Hello world ! Segmentation fault (core dumped)
    kouby avatar 3.9.2009 10:00 kouby | skóre: 27 | blog: init | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Máte pravdu, to mě prvně nenapadlo. To je další vážná chyba. :-)

    That's thirty minutes away. I'll be there in ten.
    Jardík avatar 3.9.2009 12:53 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Proč by v názvu souboru nemohly být uvozovky ... to nevadí, dokud se z toho netvoří dotaz do databáze.
    Věřím v jednoho Boha.
    3.9.2009 10:45 JS
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Neumim PHP ani programovat weby, ale neni to v tom, ze se testuji jen lowercase ".php"? Tzn. pokud nekdo vytvori soubor ".PHP", tak ten pak mozna pujde pustit, protoze z URL se bude brat case-insensitive?

    3.9.2009 11:16 kapo | skóre: 16 | blog: runtime
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Hned na zacatku je tam StrToLower(), takze se to prevadi pred testem.
    Why make things difficult, when it is possible to make them cryptic... - Aksel Peter Jorgensen
    rADOn avatar 3.9.2009 11:52 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    A co .php3, .phtml a mozna dalsi historicke relikty? Co kdyz jsou v apaci nastavene i jine cgi nebo handlery?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    3.9.2009 13:06 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    Kua, chlape, ty nečteš zadání? Viz:

    Neuvažujte jiné ošetřované přípony než „.php“ a jiný oddělovač adresářů než lomítko.
    rADOn avatar 3.9.2009 13:58 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Čtu, ale nechápu.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    3.9.2009 11:59 prOm3TheuS | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Možná bych si nejdřív ověřil, zda-li se opravdu jedná o uploadnutý soubor - viz is_uploaded_file() a pak ho pomocí move_uploaded_file() uložil na správné místo.
    Jestli si to dobře pamatuju, tak se s tím daj ošetřit i takové stavy, jako omezení velikosti vkládaného souboru apod.
    3.9.2009 13:04 xurpha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Možná bych si nejdřív ověřil, zda-li se opravdu jedná o uploadnutý soubor - viz is_uploaded_file() a pak ho pomocí move_uploaded_file() uložil na správné místo.

    Ano, například z něj udělat xyz/adresar/zakerny_skript.php, že? Doporučoval bych přečíst a pochopit nejdříve zadání a pak blbě kecat :-)

    3.9.2009 14:45 prOm3TheuS | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Od toho je pak samozřejmě nějaká taková rutina, jako byla napsána v blogu ne? Dle mého názoru je to rozhodně čistší, než ten soubor tam rvát přes $fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
    3.9.2009 15:03 eoj
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ovsem reseny problem si zkratka vubec nepochopil.
    3.9.2009 14:21 sam
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada

    jenom mne napadlo, jestli by se nedalo nahradit '.php' necim jako je '%20'  u mezery ...

    pokud bych to zkousel, asi tohle je nejjednodussi (a mozna i nejelegantnejsi) zpusob

    :)

    3.9.2009 14:58 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    V tom kódu se někde dělá unescaping URL? Já tam nikde nic takového nevidím. Takže když bude v názvu souboru "%20", dostanete "%20" i v názvu souboru.
    3.9.2009 16:06 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Což je dost nepochopitelná "vlastnost" prakticky všech webových udělátorů, s nimiž jsem se setkal. Osobně by mě zajímala situace, ve které mě jako aplikačního programátora zajímá něco jiného, než řetězce bez HTTP escapů.
    When your hammer is C++, everything begins to look like a thumb.
    3.9.2009 16:14 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Jenže on ten řetězec z proměnné $_GET už je odescapovaný, takže odescapovat ho znovu by byla chyba (a dobrý způsob, jak do programu zavléct nějakou bezpečnostní díru).
    3.9.2009 14:50 eoj
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    %00
    3.9.2009 16:03 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    A není ta chyba v tom, že nahrávané soubory jsou ve $_FILES a jméno nahrávaného souboru $_FILES["name"] ? Takže $_GET nic neošetří?
    Grunt avatar 3.9.2009 17:32 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Já jsem z toho též jelen. Vždyť soubory se snad GETem ani poslat nedají a kdyby už ano, tak v nich rozhodně nebude název. Jak to může vůbec fungovat? Zkoušel to už někdo?:
    POST /blog/EditDiscussion HTTP/1.1
    Host: www.abclinuxu.cz
    User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en; rv:1.9.1.2) Gecko/20080528 Fedora/2.26.3-3.fc11 Epiphany/2.22 Firefox/3.5
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: cs
    Accept-Encoding: gzip,deflate
    Accept-Charset: UTF-8,*
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://www.abclinuxu.cz/blog/EditDiscussion?action=add&threadId=0&dizId=142779&rid=276521
    Cookie: __utma=184452854&ehllip;
    Content-Type: multipart/form-data; boundary=---------------------------4290172515652242791849073854
    Content-Length: 26069
    
    -----------------------------4290172515652242791849073854
    
    Content-Disposition: form-data; name="title"
    
    Re: Kdy.. housing, tak NE v Casablance
    
    -----------------------------4290172515652242791849073854
    
    Content-Disposition: form-data; name="text"
    
    
    
    vggdt
    
    -----------------------------4290172515652242791849073854
    
    Content-Disposition: form-data; name="attachment"; filename="chata_cela_bok_small.png"
    
    Content-Type: image/png
    
    
    
    .PNG
    
    .
    ...
    IHDR...q...U.....~C......sRGB....... .IDATx.....k.}..y........}......E..(Q....&yS%.../2.T.f..]N.35.T<.=....b'.mI.,..(.....E.K.}.}o4.;...<...x......A.
    ...p.|....<..N[
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    3.9.2009 18:01 ...............23 | skóre: 15 | blog: Various Stuff blog
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    O to v tom blogposte nejde, ono je v tom forme akože ďalší textbox na zadanie názvu súboru na ktorý sa to po nahraní akože premenuje (čo by teda bolo v praxi debilné riešenie, ale ide o to ukázať ten bug)
    rADOn avatar 3.9.2009 18:09 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    To je jen zmatene zadani. IMO autor ma na mysli pouze fotevreni souboru zadaneho jmena v zadanem adresari, kde jmeno souboru muze byt "nebezpecne". Kdyz nic jineho, tak je to velice poucne v tom, ze zadani je ve vsech ohledech ukazkou jak se takove veci delat nemaji :-)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    Josef Kufner avatar 3.9.2009 21:31 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Ano, místo "$_GET['nazev_souboru']" by tam v reálném programu mělo být něco jiného. Nejspíš by tam bylo $_POST, protože při uploadech souborů se $_GET nepoužívá. Ale tato bezpečnostní díra se může vyskytnout i ve formuláři na přejmenování souboru na serveru, který byl uploadnut již dříve nebo pro stažení souboru od někud jinud. Tak jako tak, na vlastní díře to nic nemění a nijak na tom nezáleží. Prostě to je vstup od uživatele, který je nutné ohlídat.
    Hello world ! Segmentation fault (core dumped)
    Jardík avatar 3.9.2009 23:09 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Programátorská hádanka 3 - bezpečnostní zrada
    Už je třetího večer, tak povídej ...
    Věřím v jednoho Boha.

    Založit nové vláknoNahoru

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