Zoufalý stav JavaScriptových IDE

Už pár let je ve světě “běžného” softwarového vývoje jasné, že se JavaScriptu nedá a nebude dát vyhnout. Máme teď v Agiliu rozpracované tři projekty a každý z nich JavaScript víc nebo míň používá, ať už na klientu (a tady nejde jen o browsery, ale i o instalované aplikace) nebo na serveru (Node.js). JavaScript je už dneska skoro všude a ani do blízké budoucnosti to nevypadá, že by se trend měl nějak otočit.

Proto jsem čekal, že pro něj budou existovat dobré nástroje. A když říkám dobré, tak nemyslím editor, který podbarví kód a trochu tuší, co v kódu je identifikátor kvůli snazší navigaci. Myslím tím normální IDE, jako existují snad pro každou jinou technologii, tj. kontrola kódu, vychytaná navigace po symbolech, mechanismy pro dělení větších projektů na menší celky (knihovny), ladění atd.

Jaká je realita v roce 2012? Upřímně, docela zoufalá. Continue reading

První dojmy z AngularJS

Minulý čtvrtek v Praze proběhl druhý JS meetup a jednou z prezentací bylo hezké představení Angularu od Pavola Daniše (slajdy i ukázky zde na GitHubu).

Už jsem psal, že mě Angular zajímá, ale až JS meetup pro mě byl první příležitostí vidět tuto věc naživo a moct se ptát člověka, který s ní už delší dobu pracuje. Tady jsou mé velmi hrubé první dojmy: Continue reading

Bezpečnost je míra, ne vlastnost

Chtěl bych se s vámi podělit o jeden příběh, který se nedávno odehrál. A poněvadž nebyl vyroben kdesi v Hollywoodu, ale napsal ho sám vývojářův život, tak není moc veselý. Na jeho konci se totiž místo závěrečných titulků rolujících po plátně za zvuku dojemných melodií objeví přístupové údaje k databázi jedné české a mnou oblíbené webové služby na sdílení obrázků.

Na sklonku minulého roku se kdesi na blíže neurčeném místě setkali dva vývojáři a začali se o tomto příběhu otevřeně bavit. V dnešní době z každé nevýznamné schůzky existuje záznam a tak i toto setkání kdosi nahrával a mě se po několika krabicích lahodného vína podařilo mého dobře informovaného známého přesvědčit k tomu, aby mi záznam tohoto on-line rozhovoru dvou vývojářů přenechal a já vám tedy teď jeho přepis nabízím. Omluvte gramatické chyby a chybějící diakritiku, z důvodu autentičnosti přepis neprošel jazykovou korekturou.

Začátek záznamu je bohužel nesrozumitelný a je přehlušen zvukem houkaček projíždějících policejních vozů, ale dá se vydedukovat, že jeden ze dvou protagonistů příběhu svého kamaráda upozorňuje na to, že ne zcela legálně získal přístup k databázi uvedené aplikace a zkušeně mu doporučuje, co má v následujících okamžicích podniknout.

spaze, 9.11.2011 23:47:14:
a zmen si heslo do db

spaze, 23:47:17:
a na mail

spaze, 23:47:21:

DB_USER
string(5) "jirka"

DB_PASS
string(14) "d2d5d95h1f5ds9"

Medhi, 10.11.2011 2:33:31:
a jak jste zjistili přístup do db, v čem spočívala ta díra?

spaze, 2:34:34:
vyvolas ladenku [1], mas login do db v konstantach a ladenka vypisuje konstanty

Medhi, 2:35:38:
ono to na nette [2] neběží, měl jsem tam nette jenom kvůli formulářům a nechápu, proč se laděnka zobrazovala na production, asi to nerozpoznala [3]

V tomto místě je záznam opět nesrozumitelný, lze jen vyvodit, že Medhi nabízí za danou informaci úplatek v podobě dodávky kvalitního kubánského nápoje destilovaného ze šťávy z cukrové třtiny. Poté záznam končí.

David Grudl, duchovní otec Nette [2], se v komentářích k jednomu z předchozích článků, ve kterém popisuji možnost napadnutí webových aplikací pomocí metody Mass Assignment, vyjádřil k bezpečnosti Nette takto:

David Grudl (28. 3. 2012 | 20:22) napsal:
Ačkoliv se kvůli své lenosti také snažím dělat v Nette vše co nejjednodušší, nikdy to nesmí jít na úkor bezpečnosti. Mass Assignment se proto Nette vůbec netýká. Z Nettích formulářů vždy dostanete jen ta data, která jste explicitně specifikovali. Totéž platí pro parametry předávané přes $_GET. A nelze to ani žádnou direktivou změnit, to je by design.

Tenkrát samozřejmě ještě nemohl tušit, že světlo světa spatří výše uvedený záznam, ve kterém je právě svatá trojice NetteNettí formuláře a Laděnka označena jako pachatel všeho zla. Zda Medhi použil uvedené nástroje špatným způsobem nebo zda je vina opravdu na těchto nástrojích samotných se už bohužel nedozvíme. Nicméně pro učinění závěru z tohoto příběhu to ani vědět nemusíme.

Použití jakéhokoliv nástroje, ať už je to webový framework nebo bouchač z reálného světa s východním přízvukem automaticky nezaručí bezpečnost vašich webových aplikací, nezávisle na tom, co tvrdí autor daného nástroje. Nebo váš nejlepší kamarád. Nebo váš šéf. Vždy se naučte, jak daný nástroj pracuje, jaké má omezení, jaké vlastnosti a kdy je vhodné jej použít a kdy ne. Vše pečlivě otestujte a hlavně věřte pouze svému úsudku a svojí hlavě. Tedy pokud nějakou máte.

Bezpečnost totiž není vlastnost, ale pouze míra, kterou byste neměli nikdy snižovat.


1Laděnka je slangový výraz používaný ve vývojářském podsvětí k označení nástroje pro odhalování organizovaného zločinu v podobě chyb ve zdrojových kódech, často bývá spojován se skupinou známou pod jménem Nette.

2 Skupina Nette disponuje souborem nástrojů, které se využívají především pro rychlejší a pohodlnější psaní webových aplikací, v odborné literatuře se pro takový soubor nástrojů používá pojem framework.

3 Důvod, proč se tomu tak stalo naleznete na GitHubu v sekci Nette Issues: Debugger: wrong development mode detection.