Michal Čihař - Blog Archives for phpMyAdmin

Nové stránky phpMyAdmina

Už delší dobu se mi nelíbilo, na jakých stránkách prezentujeme phpMyAdmina a chtěl jsem s tím něco udělat. Ale prostě je pořád těžší a těžší najít si čas a tenhle úkol čekal v mojí frontě poměrně dlouho.

Největším problém se stránkami je asi způsoben hostováním na SourceForge.net a omezeními, která tam pro webhosting mají nasavená. V podstatě je nemožné do stránek nějak začlenit externí zdroje (když nepočítám JavaScript/AJAX a podobná řešení), přitom externí zdroje (resp. RSS feedy ze SourceForge.net) obsahují velkou část informací, které na webu mají být (novinky, informace o vydáních atd.). Jediná rozumné řešení je generovat statické stránky jinde a nahrávat je na web server SourceForge.net.

Toto řešení problému bylo jasné a je také jasné, že pro statické generování HTML není PHP zrovna nejlepší jazyk. Tak jsem se rozhodl použít můj oblíbený Python spolu s šablonovacím nástrojem Genshi . Ano je to tak, jedna z nejoblíbenějších aplikací napsaných v PHP používá Python pro vytváření svého webu.

Začal jsem si hrát s Genshi a feedparserem asi před měsícem, bez jakékoliv představy o vzhledu a jakékoliv naděje na úspěch, prostě jsem se jen chtěl naučit je používat. Ale hned první nástřel se pokusným králíkům (kamarádi, členové týmu phpMyAdmina a častí návštěvnící kanálu #phpmyadmin) zalíbil a tak jsem na něm trochu zapracoval, aby stránky byly připraveny před vydáním verze 3.1.0.

A dnes nastal okamžik, kdy byly nahrazeny staré stránky a už se těším na kritiku. Tož podívejte se na http://www.phpmyadmin.net/ .

Hledá se překladatel

Až do nedávna jsem překlad phpMyAdmina obstarával vlastními silami. Bohužel už v poslední době nějak nestíhám a není jiná možnost než se pokusit sehnat někoho, kdo by tyto překlady obstaral. První pokus tedy činím zde, třeba se tu nachází nějaký dobrovolník co by rád pomohl známému projektu. Kromě znalosti angličtiny nejsou potřeba žádné další znalosti.

Stačí vzít soubor s překlady , přeložit nepřeložené texty (a odstranit text //to translate ) a pak už jen soubor poslat buď to trackeru s překlady nebo přímo mě. Více informací je třeba ve FAQ .

Pro začátek na překladatele čeká koňská dávka 350 textů pro nastavovací modul a 20 pro úložiště PBXT, takže jestli nemáte o dlouhých podzimních večerech co dělat, hurá do toho :-).

phpMyAdminovi je 10 let

9. září 1998 byla vydána první verze phpMyAdmina. O deset let později tento projekt stále existuje a vyvíjí se. Proto je na místě poděkovat všem, kteří toto umožnili:

  • vývojářům MySQL a PHP
  • vývojářům a překladatelé phpMyAdmina (minulí i současní)
  • firmám, které podpořily projekt: SourceForge.net za hostování, Pack Publishing za příspěvky z knihy „Mastering phpMyAdmin“
  • a samozřejmě uživatelům

Jsme rádi, že tu s vámi jsme už tak dlouho.

Jak nedělat autentizační token

Do phpMyAdmina chtějí protlačit podporu pro jeden autentizační token. Jak tato věc funguje na hardwarové úrovni nevím (má tam být nějaký autentizační kalkulátor, který na výzvu vygeneruje nějakou unikátní odpověď), ale docela mě pobavil přístup k bezpečnosti softwarového řešení okolo. Celá popisovaná věc se jmenuje Swekey a stojí za ním firma Musbe, založená jen kvůli tomuto zařízení ( to develop and market an innovative authentication technology ).

Token se strká do USB (v dnešní době to asi ani jinak nejde) a celou věc obsluhuje v Linuxu jakási binárka komunikující s tokenem přes libusb. No aspoň, že to bude hnít v userspace a ne v kernelu. Bohužel pokud to chcete použít na něčem jiném než i386, máte smůlu. Protože nám se jedná o autentizaci webové aplikace, máme ještě k dispozici další binárku a to plugin do prohlížeče Firefox (pro Windows případně ještě ActiveX pro MSIE).

Když už se uživateli poštěstí toto rozběhat (a nebude řešit takové nepodstatné otázky, jako třeba: proč binárka obsluhující ten token musí používat curl?), může vyzkoušet úžasné možnosti, které nám tato autentizace skýtá. A hlavně se podívat na kód, který se o autentizaci stará, protože ten již k dispozici máme. Kromě phpMyAdmina, kde je jakási meziverze už v SVN, ještě existuje plugin pro SquirrelMail a prý i patch pro RoundCube, modul pro PAM atd.

Jak vlastně celá věc funguje?

  1. Načte se ID z USB tokenu
  2. Ze serveru se stáhne náhodný token (platný dvě minuty)
  3. Náhodný token se nacpe do USB tokenu a ten vygeneruje OTP (jednorázové heslo)
  4. ID tokenu, náhodný token a OTP se pošle na server a ten je ověří

No vypadá to celkem jednoduše, tož pojďme se podívat jak to soudruzi naimplementovali. Podotýkám, že v patchi pro phpMyAdmin, už pomaly níže popsané problémy mizí, ale za cenu víceméně kompletního přepsání kódu, jak se (ne)budou vyvíjet patche/pluginy pro ostatní programy netuším, nicméně autoři pořád někde preferují původní řešení.

Komunikace

První věc, která kohokoliv musela praštit do očí bylo použití nešifrovaného HTTP spojení při komunikaci se serverem. Což ve spojení s jednoduchým až triviální protokolem, znamená, že kdokoliv, kdo je schopný na jakýkoliv HTTP požadavek odeslat odpověď "HTTP/1.0 200 OK\n\nOK" se může stát autentizačním serverem, který autentizuje cokoliv komukoliv. Soudruzi sice v patchi pro phpMyAdmina přešli na HTTPS s ověřováním certifikátu, ale z výkonnostních důvodů jinde zůstane nadále HTTP. Vskutku inovativní řešení.

Umístění souborů

Mapování tokenů na uživatele mělo být umístěno v kořenovém adresáři phpMyAdmina a tedy přístupné přes web. Což ve spojení s předhozí zranitelností znamená, že jediná informace, kterou by případný útočník potřeboval - ID klíče, který mu dovolí přístu, může bez problémů získat napsáním správného URL.

Dočasné soubory

Protože náhodný token je platný dvě minuty, rozhodli se autoři ušetřit námahu jejich serveru s generováním a tento token cachovat. Bohužel ukládat pevně pojmenovaný soubor do adresáře /tmp není zrovna nejlepší nápad a už vůbec není dobrý nápad tento soubor vytvářet s právy 777 . Co by se asi stalo, kdyby náhodný uživatel na serveru do tohoto souboru uložil třeba nějaký film a ten se následně začal odesílat na jejich server jako náhodný token při autentizaci?

No nechtějte to

Většina zde zmíněných problémů existuje ve všech implementacích tohoto tokenu, do kterých jsem se koukal. Kromě toho každá implementace přidává spoustu unikátních programátorských chyb. Zájemcům o pobavení se doporučuji modul pro PAM, který je vlastně jen spouštěč skriptu v bashi, který volá curl a komunikuje se serverem.

Update

Při psaní tohoto článečku mě napadl ještě jeden problém, kterým to asi bude trpět, ale nechtěl jsem to psát dokud to neověřím, což se právě stalo. Přístup k tokenu z prohlížeče není pluginem nijak omezován, takže jakákoliv stránka může zjistit ID vašeho tokenu a vygenerovat si OTP heslo. No lepší podmínky pro krádež identity si už lze představit jen těžko :-).

Bezpečnost webových aplikací

Na bezpečnostním mailing listu phpMyAdmina se objevil nějaký etický hacker a začal trochu šťourat do našeho kódu, což je jenom dobře :-). První výsledky tohoto šťourání už přinesla verze 2.11.7.1 , ale s většinou změn přijde až 2.11.8.

Kromě spousty určitě užitečných připomínek, ale přišel i s jedním kontroverzím nápadem a to znemožnit potenciálnímu útočníkovi zjistit o jakou verzi phpMyAdmina jde. Kromě toho, že samozřejmě pořád bude existovat dostatek starých verzí, které to o sobě řeknou, tak to stejně jenom zavání security by obscurity. Nicméně to ale může útočníkovi trochu zkomplikovat život. Na druhou stranu schování těchto informací je práce navíc a vynutilo by si odstranění textového ChangeLogu.

Co si o tom myslíte vy? Má smysl skrývat jakoukoliv zmínky o tom o jakou verzi se jedná (včetně například ChangeLogu) před nepřihlášeným návštěvníkem?

Objev týdne: Salamandra

Hlasujte pro phpMyAdmina v Hackontestu

phpMyAdmin si zatím drží třetí místo, které zajišťuje účast v programátorské soutěži Hackontest , která se koná koncem září v Curichu. Během 24 hodin budou tři vybrané týmy implementovat vlastnost, kterou si uživatelé budou nejvíce přát. Hlasujte tedy pro to, co vám v phpMyAdminovi nejvíce chybí. Více informací na http://www.hackontest.org .

Zmatení z Czech Open Source

Když jsem dneska viděl anketu na rootu , na první pohled jsem si myslel, že se někdo zbláznil a dostaly se tam dva projekty na kterých dělám - Wammu a phpMyAdmin . Po bližším zkoumání se ukázalo, že tam mám jenom jeden a phpMinAdmin opravdu není phpMyAdmin, jak si zabudovaná oprava překlepů v mozku původně domyslela.

Když si vzpomenu, kolik open source projektů muselo změnit jméno kvůli podobností názvu s nějakým komerčním produktem, tak si říkám, jak by to dopadlo tady (ne že bych měl něco takového v plánu). Ale stejně by mě zajímalo kolik lidí si to splete a bude si myslet, že hlasují pro phpMyAdmina :-).

PS: Jinak samozřejmě hlasujte pro Wammu, ať taky něco vyhraju (i když vůbec netuším co že tam projekty mají vyhrát :-)).

Summer of code 2008 s phpMyAdminem

Přestože phpMyAdmin nebyl vybrán mezi projekty účastnící se Google Summer of Code , díky kolegům z MySQL se projekty na vylepšení phpMyAdmina mohou této akce zúčastnit. Pokud tedy studujete a chcete si přes léto přivydělat peníze pomocí phpMyAdminovi, můžete inspiraci čerpat z  našich nápadů na vylepšení , nebo přijít z vlastním nápadem. Nabídka od MySQL přišla na poslední chvíli, tak se rozmýšlejte rychle, poslední šance na odeslání přihlášek do Googlu je 7. dubna.

phpMyAdmin se přihlásil do Hackontestu

Tým phpMyAdmina by se rád zúčastnil programátorské soutěže Hackontest , která se koná koncem září v Curichu. Během 24 hodin budou tři týmy vybrané komisí implementovat vlastnost, kterou si uživatelé budou nejvíce přát. Pokud chcete pomoci phpMyAdminovi se účastnit na této soutěži, navrhujte nebo hlasujte pro nové vlastnosti phpMyAdmina na http://www.hackontest.org .

Aktualizována kniha o phpMyAdminovi

Anglická kniha o phpMyAdminovi byla aktualizována pro současnou řadu phpMyAdmina – 2.11. Pokud vládnete angličtinou, tak pro vás může být ideálním zdrojem informací. Zakoupením této knihy přispíváte i přímo projektu phpMyAdmin! Více informací o novém vydání naleznete na stránkách vydavatelství .