OpenChaos.dev je 'samovolně se vyvíjející open source projekt' s nedefinovaným cílem. Každý týden mohou lidé hlasovat o návrzích (pull requestech), přičemž vítězný návrh se integruje do kódu projektu (repozitář na GitHubu). Hlasováním je možné změnit téměř vše, včetně tohoto pravidla. Hlasování končí vždy v neděli v 9:00 UTC.
Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.
Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.
Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).
Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.
AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.
Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou
… více »Patchouli je open source implementace EMR grafického tabletu (polohovací zařízení). Projekt je hostován na GitLabu.
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.
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.
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.
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:
Trim() (resp. RTrim()).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ě
):
Tiskni
Sdílej:
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ř. taktoI když je povoleno, nemusí být AddType v .htaccess účinné. Záleží na způsobu zpracování PHP serverem.AddType application/x-httpd-php .txt
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íTo protože nechtěli kazit zábavu těm později čtoucímZeptám se proto ještě jednou (a odpovídejte po pravdě
Přesně to mě napadlo taky - kontrolovat příponu v linuxu? (Jinak - abych nemachroval - bych na ten exploit samozřejmě nepřišel.)
hehe
)
Response Headers:
... Server: Jetty(6.1.11) 200 OK
Takže nie, abíčko nebeží na Apachi.
com.caucho.quercus.lib.db.Mysqli to vypadá, že tam s kódováním znaků skutečně něco šaší:
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).// Explicitly indicate that we want iso-8859-1 encoding so // we would know what encoding to use to convert StringValues // to Strings // php/140b
protected static final String ENCODING = "ISO8859_1";
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 
O ten Apache mi šlo preto, že je obecne považovaný za veľmi výkonný server a dobre škáluje.
To je vtip?
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.
Pravda, Apachí web server byl trošku v nevýhodě, ale koho to dnes zajímá. 
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).
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)
>>> 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
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.
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 ...