Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 156 (pdf).
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 25.8.1. Přehled novinek v Changelogu.
Včera večer měl na YouTube premiéru dokumentární film Python: The Documentary | An origin story.
Společnost comma.ai po třech letech od vydání verze 0.9 vydala novou verzi 0.10 open source pokročilého asistenčního systému pro řidiče openpilot (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu.
Ubuntu nově pro testování nových verzí vydává měsíční snapshoty. Dnes vyšel 4. snapshot Ubuntu 25.10 (Questing Quokka).
Řada vestavěných počítačových desek a vývojových platforem NVIDIA Jetson se rozrostla o NVIDIA Jetson Thor. Ve srovnání se svým předchůdcem NVIDIA Jetson Orin nabízí 7,5krát vyšší výpočetní výkon umělé inteligence a 3,5krát vyšší energetickou účinnost. Softwarový stack NVIDIA JetPack 7 je založen na Ubuntu 24.04 LTS.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) spolu s NSA a dalšími americkými úřady upozorňuje (en) na čínského aktéra Salt Typhoon, který kompromituje sítě po celém světě.
Společnost Framework Computer představila (YouTube) nový výkonnější Framework Laptop 16. Rozhodnou se lze například pro procesor Ryzen AI 9 HX 370 a grafickou kartu NVIDIA GeForce RTX 5070.
Google oznamuje, že na „certifikovaných“ zařízeních s Androidem omezí instalaci aplikací (včetně „sideloadingu“) tak, že bude vyžadovat, aby aplikace byly podepsány centrálně registrovanými vývojáři s ověřenou identitou. Tato politika bude implementována během roku 2026 ve vybraných zemích (jihovýchodní Asie, Brazílie) a od roku 2027 celosvětově.
Byla vydána nová verze 21.1.0, tj. první stabilní verze z nové řady 21.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools a Libc++.
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?
nechci to zkoušet, ale nešlo by $_GET['nazev_souboru']
dát třeba "osklivyskript.php?neco=jpg"
?
ne, samozřejmě že nešlo ;)
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é.
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?
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
Soubor s hesly by měl být někde úplně mimo (třeba v /etc).
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.
Tak to asi mám... alebo som objavil ešte nejakú inú chybu.
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.
fuj.php\0.txt
neprojde? Nebo od kdy to php zahazuje?
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...
A není to vzhledem k problému úplně fuck?
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).
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í.
?promenna=neco%00neco
, tak tam ten nulový bajt opravdu je…
Tak proč to harovi nefunguje?
FOpen
považuje a SubStr
nepovažuje – taková blbost, ale kolik to dokáže nadělat škody, co?
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...
Jiste, p*čoviny se dají dělat i s pomocí regexp... klidně se tam dá rovnou dát „^.*$“, že ano...
^[a-z0-9]+\.[a-z0-9]+$Ale test na příponu bych musel udělat stejně zvlášť.
Máte pravdu, to mě prvně nenapadlo. To je další vážná chyba.
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?
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.
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
$fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
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
:)
$_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).
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[
Tiskni
Sdílej: