Tento týden vám hacknou web
Co chvíli je hlášena bezpečnostní díra na dalším významném webu (Alza, Mapy.cz, BontonLand). Nebo je díry zneužito. Zkuste si vyhledat slova XSS zranitelnost a pochopíte, proč je Cross Site Scripting (XSS) dnes jednou z nejrozšířenějších a nejnebezpečnějších děr.
Záležitost nepříjemná pro provozovatele webů a snad ještě víc pro dodavatele. Může poškodit jméno, může dojít na pokuty, žaloby, nebo jen pokazí vztah s klientem. Jak se proti XSS bránit? Tzv. escapováním řetězců. Bohužel naprostá většina odborníků v tom plave. (Nechci být netaktní a někoho se dotknout, snad jen řeknu, že z „československých IT celebrit“ znám asi jen jednoho člověka, který se ve věci do hloubky vyzná.) Tudíž i články o této problematice na známých webech jsou, řekněme, nepřesné.
Navíc ono escapování se obvykle provádí v šabloně, padá tak na bedra kodéra. Tedy nejkritičtější místo vyžadující vysokou erudici řeší člověk nepovolaný. Jak taková věc může dopadnout? To přeci víme – viz první odstavec.
Spasí vás Nette Framework
Rád bych vám představil jednu killer feature šablonovacího systému Nette Framework. Vlastnost tak zásadní, že sama o sobě je důvodem framework zvolit. Nebo klidně z něj použít jen šablony.
- čím jste větší firma, tím je pro vás vlastnost důležitější
- žádný konkurenční framework ji dodnes nemá 1)
Nette Framework v šablonách escapuje automaticky. Jeho vlastnost Context-aware escaping rozezná, ve které části dokumentu se nacházíte a podle toho zvolí správné escapování.
Teď zabrousím do techničtější roviny. Jak to funguje, nejlépe uvidíte
na příkladu. Mějme proměnnou $var a tuto šablonu:
<p onclick="alert({$var})">{$var}</p>
<script>
document.title = {$var};
</script>
Zápis {$var} znamená vypsání proměnné. Jenže každé
vypsání je nutné ještě explicitně ošetřit, dokonce na každém místě
jinak. Kodér musí (například ve Smarty) připsat příslušné
modifikátory, nesmí se přitom splést a hlavně nic opomenout.
V Nette Framework není potřeba nic ošetřovat. Vše se udělá automaticky, správně a důsledně!
Pokud dosadíme do proměnné $var = 'Šířka 1/2"', framework
vygeneruje HTML kód:
<p onclick="alert("Šířka 1\/2\"")">Šířka 1/2"</p>
<script>
document.title = "Šířka 1\/2\"";
</script>
Samozřejmě je myšleno i na situaci, když je potřeba vypsat proměnnou
bez ošetření, například proto, že obsahuje text článku včetně HTML
značek. V takovém případě se použije zápis {!$var}, kde
vykřičník srozumitelně funguje jako výstražné znaménko.
Konec technické odbočky. Díky Nette Framework najednou platí, že
- podoba šablony zůstala jednoduchá
- vy se nemusíte bát, že kodér někde něco opomene
- a zároveň v něm nepotřebujete mít top odborníka na escapování ;)
- práce jde mnohem snáze
Další informace o chytrých šablonách najdete třeba na Zdrojáku nebo v návodu, kterak je lze používat samostatně.
p.s.: pokud jste čekali, že se tento článek bude věnovat jiné novince – dědění bloků – pak vydržte, objeví se tu příští týden
1) asi půl roku po Nette přišel s podobnou vlastností Google pro svoji knihovnu v C++, žádný framework v PHP, Ruby nebo Pythonu nic podobného, pokud vím, dosud nemá
Orgasmy PHP 5.3 nevítají
Přichází trošku jako opozdilec, pro kterého včera večer byla přichystána velkolepá oslava, ale dnes už se hosté rozešli domů. Před rokem a půl byl internet plný článků o klíčových novinkách v PHP 5.3, po neustálém odkládání termínů a méně příjemných změnách nadšení vychladlo.
5 – 4 – 3 – 2 – 1 DOWNLOAD!
Jaké jsou novinky? Podstatné. Vezmu to podle důležitosti:
- podpora jmenných prostorů,
oddělovačem je zpětné lomítko (
Nette\Web\Html) - late static binding, statické metody konečně ví, nad kterou třídou jsou volány
- lambda funkce a uzávěry (nakonec bez podpory
$this), metoda__invoke - overloading pro statické metody via
__callStatic() - vylepšený garbage collection, který si poradí s cyklickými referencemi
- výjimky mohou odkazovat na předchůdce,
getPrevious() - nativní driver pro komunikaci MySQL a PHP (z pohledu programátora se API nemění)
- nová rozšíření ext/sqlite3, ext/phar (článek), ext/intl, ext/fileinfo, ext/enchant
- rozšíření syntaxe o zkrácený
ternární operátor
?:,NOWDOCagoto(ajáj) - magická konstanta
__DIR__nahrazující mantrudirname(__FILE__) - obrovská řada drobných změn u stávajících funkcí (velmi podrobně u Jakuba)
- rozšířeny schopnosti parseru php.ini (ale omezena flexibilita INI parseru jako takového)
- odstraněn zend.ze1_compatibility_mode
To klíčové přijde v následujících týdnech: jak rychle se PHP 5.3 rozšíří? Vzhledem k tomu, že bylo vyvíjeno jako přirozený nástupce řady 5.2 bez zpětně nekompatibilních změn, šance na brzké rozšíření rozhodně má. Nicméně si myslím, že hostéři budou čekat, až vyjde následující setinková verze. Jako když se u Windows čekává na první service pack.
Historie jim přitom dává za pravdu:
- PHP 5.0.0, které vyšlo s rozdílem 14 dní právě před pěti lety, bylo použitelné cca od verze 5.0.3.
- PHP 5.1.0 existovalo pouhé 4 dny a bylo nahrazeno 5.1.1, za dva týdny 5.1.2.
- PHP 5.2.0 bylo opět případem zabugované verze, kde smutnou roli sehrál Debian.
(Totiž Debian Etch má tuto verzi předinstalovanou a nepochopitelný konzervatismus správců vede k tomu, že odmítají PHP updatovat, bo „jen to, co je v Debianu, je stabilní.“)
Přeji PHP 5.3 rychlý a úspěšný nástup do světa!
Kuk na screencast

Potěším všechny začátečníky, kteří se chtějí seznámit s Nette Frameworkem. Odedneška je to mnohem snazší. Máme pro vás totiž profesionální screencast. Tedy výukové video, kde sledujete obrazovku počítače a posloucháte lektora, který vás naučí prvním krokům s frameworkem. Jde o první počin z plánované série screencastů.
Přeji vám dobrý obraz a ostrý zvuk!
Ze zákulisí
Málokdo si umí představit, že za těmi 10 minutami videa se skrývají dlouhé desítky hodin práce a výzkumu. Snoubí se tu totiž celá řada disciplín, po pedagogické stránce je potřeba vést diváka od jednoduchého ke složitému a nesklouznout mimo trasu, po vizuální stránce je potřeba zaujmout, po technické stránce musíte správně zvolit a nastavit video kodek nebo vyčistit zvuk. Musím proto moc poděkovat Tomáši Vítkovi, že vytrval točit klikou a screencast dotáhl až do současné podoby. Věci, které zbývá doladit, už lze považovat za technické detaily.
A ještě zbývá přidat intro ;)
2. Nejlepší software roku: Nette Framework
Verdikt odborné poroty: Nette Framework je 2. nejlepší software roku 2009!

Nette Framework existuje ve světě open source teprve rok. Loni jej znalo jen pár zainteresovaných lidí. Je proto úžasné, jakého umístění se mu na COS 2009 dostalo. Vážím si toho a porotcům i hlasujícím velmi děkuji!
(Mimochodem, víte na jakém frameworku dnes běží server Root.cz? Ano, přesně na tom!)
Umístění je jistě motivací pro celou komunitu. Je přece fajn se podílet na jednom z nej… projektů. A zároveň skýtá výzvu příští rok výsledek ještě překonat ;) Pokusíme se o to, máme totiž velkou spoustu nápadů a plánů, jak samotný framework i jeho web vylepšit. Rozhodně se máte na co těšit!
Docela šokující čísla, že?
Zajímá vás, kolik vývojářů skutečně stojí za slavými projekty, bez marketingového mlžení? Pokusím se vyvrátit jeden mýtus, který někdy zaznívá proti Nette Framework, ale je docela možné, že vás tím připravím o iluze. Čtěte proto jen na vlastní nebezpečí!
O jaký jde mýtus? Pod Jakubovým článkem o vývoji open source projektů padl komentář:
Přesně tohle (tj. velmi malý počet vývojářů) je důvod proč dělám v Zendu a ne v Nette. Nette je skvělé protože ho dělá David. Jakmile s tím přestane, tak půjde do kytek i kdyby mělo komunitu sebelepší.
Já naopak musím říct, že projekt může zakladatele přežít jen tehdy, pokud sebelepší komunitu má. Nette Framework je svou komunitou už pověstný. Dovolím si zopakovat slova z minulého článku: podívejte se na české fórum kde je 9000 příspěvků a zkuste srovnat s jinými projekty. Nebo navštivte Poslední sobotu a zjistíte, že fórum je vlastně jen špičkou ledovce – na Sobotách probíhají zcela seriózní prezentace prací na dokumentaci, screencastech, vlastních komponentách atd. (Chystám články týkající se těchto jednotlivých počinů a jejich autorů.)
Ale vraťme se k počtu klíčových vývojářů u jednotlivých projektů. Obvyklá představa, že za každým významným projektem stojí početný tým vzájemně nahraditelných vývojářů, začala brát za své, když před dvěma lety vyšla zpráva, že projekt Thunderbird opouštějí oba hlavní vývojáři. Ano, zarážející je už to slůvko „oba“. Odchod pouhých dvou vývojářů Scotta MacGregora a Davida Bienvenu způsobil, že nad celým projektem se začala stahovat mračna.
Dejme to do souvislosti se zajímavými čísly, které nabízí server Ohloh. O projektu Thunderbird mi prozradil, že má úctyhodných 24073 commitů (commit je jeden příspěvek do kódu od jedné osoby). Přičemž na ty dva zmíněné vývojáře připadá 30 % commitů:

Opakuji: celých 30 % vývoje Thunderbirdu obstarali dva programátoři, jejichž odchod může být pro projekt smrtelný.
Nebudu chodit kolem horké kaše a podívám se stejnou metodikou na zoubek Zend Framework. Na obří framework, či spíše knihovnu, za jehož popularitou stojí jméno společnosti Zend a pro nějž hovoří „stovky vývojářů“ + několik „placených“. Nechme promluvit čísla:

Ano, 52 % frameworku je práce čtyř lidí. A pozor: na 2 hlavní vývojáře připadá 32 % frameworku, tedy situace je ještě malinko „nebezpečnější“ než v případě Thunderbirdu. Přesto nepochybuji, že pokud ty dva vývojáře srazí tramvaj (nebo šalina), vývoj frameworku by sice na nějakou dobu ustrnul, ale bude pokračovat dál.
Zend Framework přitom patří ještě mezi ty méně ohrožené projekty. Co třeba nesmírně slavné Ruby on Rails? Na grafu vidíte poměr commitů dvou hlavních vývojářů:

Ano, to je zásadní skok oproti předchozím projektům. Už pouhým dvěma vývojářům patří majorita. A ptám se: je snad Ruby on Rails odmítané proto, že by mohla Davida Heinemeiera Hanssona srazit šalina? Nebo naopak se bere jeho vize a pevné uchopení projektu jako výhoda? A obává se někdo, že ti dva nejsou placení vývojáři?
Když už brousíme mimo PHP, podívejme se na nejslavnější framework pro Python – Django:

O čtyři procenta víc než v předchozím případě. Bez dalšího komentáře.
Tak zpět do PHP luhů a hájů. Kromě Zend Framework a Nette Framewok se u nás těší největší popularitě asi CakePHP. Podle statistik jde o dílo tří hlavních vývojářů:

Ještě bych měl zmínit PRADO, kde téměř kompletní vývoj má pod palcem dvojice programátorů:

Z uvedených příkladů jde rozhodně o nejvyšší hodnoty. V tomto případě bych si už netroufl paušálně tvrdit, že by projekt pokračoval navzdory odchodu dvou vývojářů pod tramvaj – musel bych nejprve dobře znát komunitu kolem PRADO.
Ale ať skončíme pozitivně. Nakonec jsem si nechal projekt, který rozložením sil vychází jednoznačně nejlépe a tím je Symfony:

Nicméně i zde existuje dominantní jedinec, vůdce stáda, který převažuje nad ostatními.
Je vážně tak zle?
Ale vůbec ne! Pochopte prosím, že mým cílem nebylo vás strašit, ale pouze uvést do reality a demaskovat marketingové pozlátko. Raději zdůrazním, že
- jednotlivá čísla vůbec nic nevypovídají o kvalitách projektů
- nelze je použít ani jako vodítko při rozhodování
Naopak je přirozené a logické, že všechny projekty jsou dílem několika málo osobností. Tak je to na světě zařízené. A naopak, čím více lidí má právo commitovat, tím více se do kódu dostane balastu. Jak se dokáže ten který projekt vyrovnat se ztrátou vůdčích osob je vždycky nejisté. V případě Nette Framework mě těší vědomí, že konečně po pěti letech vývoje vím, že by se vyrovnat dokázal.
Doplnění: Karmi mi v komentářích připomněl důležitou věc, kterou jsem v článku opomněl a způsobil tak nedorozumění. Článek odkrývá skutečnost, že za úspěšnými projekty stojí vždy jen pár nesnadno nahraditelných osobností (úkolem marketingu je vytvořit opačný dojem). Je ale potřeba dodat, že u dobře fungujících open source projektů se pozice těchto osobností v čase mění. Nejprve jsou to výhradní autoři a programátoři, aby se časem přesunuli do pozice těch, kteří projekt vedou a dávají mu vizi. A třeba úplně přestanou psát kód.
