Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

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(&quot;Šířka 1\/2\&quot;&quot;)">Šířka 1/2&quot;</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á

clock včera pencil Nette comments Komentáře: 11


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 ;)

clock před 24 dny pencil Nette comments Komentáře: 20


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!

clock před 29 dny pencil Nette comments Komentáře: 84


Jak snadno psát špičkové webové aplikace?

A hlavně: jak je psát rychle a bez bezpečnostních děr?

Máte kliku! Ještě před pár lety bych vám odpověděl, že se musíte nejprve několik roků vzdělávat a nakonec stejně přijmout fakt, že vaše práce nebude dvakrát efektivní. Dnes, s příchodem frameworků, se situace naštěstí mění. Konečně je možné napsat v PHP kvalitní webovou aplikaci v krátkém čase a bez bezpečnostních děr.

Proto v zahraničí vývojářské firmy ve velkém přecházejí na frameworky. Pokusím se shrnout jejich důvody.

Proč vývojářské firmy přecházejí na frameworky?

  • ušetří nepředstavitelné peníze za vývoj vlastních řešení
  • využívají osvědčenou technologii, odladěnou komunitou
  • z toho vyplývá minimalizace bezpečnostních rizik (ty mohou poškodit reputaci i klienty)
  • zásadním způsobem zefektivní vývoj
  • čímž výrazně roste jejich konkurenceschopnost a ziskovost
  • a pozor – nemusejí zaměstnance školit na svůj proprietární systém!

Nejen, že nemusejí školit zaměstnance, oni také mohou rovnou hledat programátory se znalostí určitého frameworku. Tím se dostáváme k první odpovědi na otázku:

Proč se programátoři učí frameworky?

  • protože podstatně zvýší svou hodnotu na trhu práce
  • mají větší uspokojení z programování
  • neboť dokážou rychle přetavit myšlenku do kvalitní webové aplikace
  • a stávají se součástí komunity zdatnějších programátorů

A tady se kruh uzavírá. Zdatnější programátoři totiž nepůjdou pracovat do firmy, která se drží „zpátečnických“ postupů. Půjdou tam, kde používají frameworky, kde hledají programátory už s jejich znalostí.

Nástup frameworků odděluje zrno od plev a ještě více rozevírá nůžky mezi jedničkami a nulami v oboru.

Jaký zvolit framework?

Je báječné, že se dnes dá vybírat hned z několika výborných frameworků, které jsou navíc šířeny zcela zdarma. Každý z nich má jiné přednosti a jiné zápory. Čistě pragmaticky, vzhledem k výše řečenému, omezím výběr na PHP frameworky, mezi kterými se firmy nejčastěji rozhodují, jejichž znalost je na trhu práce nejvíce poptávaná. A to je Zend Framework a Nette Framework.

Ať už zvolíte kterýkoliv, neuděláte chybu. Vůbec nejlepší je naučit se frameworky oba. A jelikož o Zend Frameworku toho bylo napsáno už velmi mnoho, pokusím se vyjmenovat, v čem je Nette Framework lepší. 1)

Proč si zvolit Nette Framework?

  • mnohem strmější křivka učení 2)
  • obsahuje bezkonkurenční ladící nástroje
  • a bezkonkurenční zabezpečení proti bezpečnostním dí­rám
  • exceluje ve výkonu 3)
  • nejaktivnější komunitu v ČR
  • můžete absolvovat školení
  • vyzrálý a čistý objektový návrh využívající interfaces 4)
  • výborně rozděluje práci mezi HTML kodéra a programátora
  • podporuje nejnovější technologie (např. jmenné prostory)
  • lze jej výhodně doplňovat se Zend Frameworkem

Zvolte Nette Framework a zařaďte se tak po bok nejvýznamnějších společností, jako je Internet Info (vydavatel Lupa.cz, Root.cz), Vltava-Labe-Press, Mladá fronta, iMagic a dalších. Přečtěte si reference.

Jak se naučit Nette Framework?

Asi nejsnazší cestou je začít seriálem Začínáme s Nette Framework, který pravidelně vychází na serveru Zdroják (pozn.: díly jsou uvedeny v obráceném pořadí, první je dole). V tuto chvíli jde o nejucelenějšího průvodce pro začátečníky. Postupně se také zdokonaluje česká dokumentace na mateřském serveru.

Budete si moci napsat svou první aplikaci a objevit výhody Nette Frameworku. Jakmile narazíte na nejasnost, je vám k dispozici české diskusní fórum. Zkuste tam schválně nahlédnout a uvidíte, že s tvrzením o nejaktivnější komunitě v ČR jsem ani v nejmenším nepřeháněl.

Jsem si vědom toho, že zejména v komerční sféře představuje výuka samostudiem neefektivní cestu a může se firmě prodražit. Řešením jsou školení, konkrétně kurzy Úvod do Nette Framework a dvoudenní Vývoj webových aplikací v Nette Framework. Ten je záměrně pořádán v pátek a sobotu, aby co nejméně narušil chod firmy. Kromě veřejného školení (aktuální termíny najdete zde na webu v pravém sloupci) lze uspořádat i školení ve vaší firmě. Přečtěte si ohlasy.

Co se naučíte na školení?

Naučíte se efektivitě. Vývoj webových aplikací naráží v každé firmě na úskalí, která jsou jako podle kopíráku. Školení vám ukáže, jak tyto úskalí zdolávat nebo jak se jim vyhnout. Naučí vás techniky, jak psát aplikace bez chyb a jak je ladit. Naučí vás, jak eliminovat řadu bezpečnostních děr. Cílem přitom bude čistý a účelný návrh aplikace s důrazem na budoucí rozšiřitelnost. Předmětem školení není jen framework, ale vývoj webové aplikace. Framework slouží jako nástroj.

Každý absolvent školení obdrží certifikát.

Na podzim 2009 se chystá nový kurz vývoje AJAXových aplikací.

Programy pro studenty

Mezi studenty se Nette Framework těší velké popularitě. Je příjemným zjištěním, že v dnešní době si studenti uvědomují hodnotu svého know-how a projevují značný zájem o zmíněné školení. Odměnou je jim až 50% sleva. Dokonce se mohou zapojit do partnerského programu a získat zajímavou provizi za doporučení.

Další připravované akce, na které srdečně zvu studenty těchto vysokých škol:

…a po práci zábava!

Přátelé webových frameworků a zejména Nette Frameworku pořádají pravidelná neformální setkání každou poslední sobotu v měsíci, pod názvem (překvapivě) Poslední sobota. Místem setkání je střídavě Praha a Brno. Na programu jsou prezentace nových nápadů a řešení, no a samozřejmě neformální pokec u piva. Vstup na akci je zdarma.


1) disclaimer: autor tohoto článku se (hrdě) podílí na vývoji Nette Framework

2) dle vyjádření jednoho z největších odborníků na PHP frameworky Jiřího Knesla

3) výsledek nezávislého měření na serveru Root.cz

4) dle slov jednoho z největších světových odborníků na PHP Jakuba Vrány: „…na co jsem se v Nette podíval a co by většina programátorů napsala špatně, to bylo správně, vzorově“

clock před měsícem pencil Nette comments Komentáře: 23


Testování routingu v Nette Frameworku

Poslouchaj, Roubíček, vědí, že mě dneska inspirovali?

Pokud máte určité povědomí o MVC, tak víte, že každý požadavek je předán ke zpracování nějakému páru controller & action. V terminologii Nette se říká presenter & view. Nette jde v této filosofii o krůček dál a uvnitř aplikace (tj. v kódu nebo šablonách) se neodkazuje pomocí URL, ale přímo oním párem presenter & view. Tato zdánlivá drobnost má v praxi naprosto zásadní dopad: jakmile to jednou vyzkoušíte, nebudete chápat, že jste kdy mohli psát aplikace jinak.

Stejný princip odkazování zvolil i Microsoft pro svou MVC implementaci pod ASP.NET.

Součástí každé webové aplikace je pak předpis pravidel, jak libovolné URL převést na presenter & view a obráceně. Jde o jakousi obdobu pravidel mod_rewrite, o kterých dokumentace zcela bez okolků říká:

mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.

Trefné! Routování je prostě magie. Ačkoliv mám s Nette Frameworkem poměrně bohaté zkušenosti, routování je oblast, ve které se toho mám ještě dost co učit. Užitečným pomocníkem mi ode dneška bude Routing Debugger.

Jeho nasazení je velice jednoduché. Stáhněte si Nette Framework, Routing Debugger a spusťte ukázkovou aplikaci examples/akrabat.forms. Nyní stačí do souboru bootstrap.php za definici routovacích pravidel přidat následující příkaz:

require 'RoutingDebugger.php';
RoutingDebugger::run();

Nyní všechny požadavky bude zpracovávat routovací debugger. Ten zobrazí stránku, kde oznámí, na který presenter & pohled aktuální URL vede, jaké se mu předají parametry a také zobrazí tabulku s přehledem všech definovaných cest včetně příznaků, jestli pasují i na aktuální URL:

Všimněte si, že tabulka je vyvedena v krásných barvách, teplých i studených, protože Nette Framework je určen pro teplé i studené vývojáře. V tom je právě jeho síla.

clock 9. 1. 2009 pencil Nette comments


phpFashion © 2004, 2009 David Grudlo webu

Jakékoliv užití obsahu, včetně převzetí článků nebo jejich částí, je bez předchozího písemného svolení autora zakázáno.

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.

Tipy: Nafukovací čluny, lodě, kajaky, rafty | Spolehlivý obchod | Pevné zdraví, léky, afrodiziaka, fitness, lékárna | Parfémy | Dieta, hubnutí