Vyšel Nette Framework 2.0 final
Nálepky:
Po letech vývoje, po alfa a beta verzích a třech release kandidátech, Nette Foundation s hrdostí oznamuje, že vyšla nová verze jednoho z nejpopulárnějších frameworků u nás: Nette Framework 2.0 final.
Nette Framework 2 obsahuje řadu novinek, z nichž některé jsou světově unikátní:
- podpora Dependency Injection, používaná v celém frameworku
- nová databázová vrstva s integrovaným úžasným NotORM
- kompletně přepsané Latte, velmi šikovný šablonovací jazyk
- přizpůsobitelná Laděnka, malý pomocník každého vývojáře s množstvím předdefinovaných panelů
- nový značkovací jazyk NEON
- zcela nové možnosti konfigurace aplikace a frameworku
- Nette nadále zůstává jedním z nejlépe zabezpečených frameworků na světě
…a mnoho a mnoho dalších vylepšení v každé části frameworku.
Nette Framework také přichází s novou a dokumentací. Jak začít? Stáhněte si jej a zkuste Quick Start.
Příjemný vývoj s Nette dvojkou!
Nette prošlo bezpečnostním auditem, jako třeba Symfony (http://symfony.com/blog/symfony2-security-audit), nebo to je jenom proklamace autorů? (že je nový, světově unikátní, úžasný, šikovný o tom už nikdo pochybovat přeci nemůže ;))
Jedna věc je bezpečnost frameworku jako takového (což je pro Nette zásadní priorita a pokud se nepletu, za jeho existenci nebyla hlášena žádná bezpečnostní chyba), druhá věc je bezpečnost aplikací v Nette vytvářených. Tady hraje zásadní roli Latte filtr, který používá kontextově senzitivní escapování, což je na poli PHP skutečně unikátní vlastnost, díky které jsou aplikace psané v Nette odolné vůči XSS. Případně Nette Database, který aktivně předchází SQL injection.
Pochopitelně to neznamená, že v Nette nejde napsat děravá aplikace. Rozdíl je v tom, že programátor nemusí kvůli bezpečnost vynakládat nadstandardní úsilí.
Že nebyla nalezena bezpečnostní chyba je skoro podezřelejší než kdyby tam nalezena byla ;) XSS, SQL inj., ošetřují snad všechny frameworky bez nadstandardního úsilí. Jediné co je opravdu navíc je to kontextové escapování. Trochu magie. Hledal jsem v dokumentaci a jediný co jsem se dověděl je, že se nemám starat, že to prostě magicky funguje vždy všude za všech okolností. Co k tomu dodat.
O kontextově sensitivním escapováni se můžete dočíst buď v dokumentaci http://doc.nette.org/cs/templating#toc-context-aware-escaping nebo třeba na blogu Jakuba Vrány http://php.vrana.cz/kontextove-citlive-osetrovani-vystupu.php
… Že v Latte není potřeba nic manuálně ošetřovat. Vše se děje automaticky, správně a důsledně. Nemusíte se bát bezpečnostní děr. …
:-)
kdybys uměl php, mužes se podívat do zdrojoveho koudu
Jak ošetřuje XSS třeba takový Zend Framework? Nijak – musíte ručně zavolat funkci
$this->escape()
. Jednou na to zapomenete a XSS je na světě. Korunu tomu všemu nasazuje tím, že i když tuto funkci použijete, tak se XSS nutně nezbavíte, např. v takovémto zdánlivě neškodném, validním a pečlivě ošetřeném kódu:<span title='<?php echo $this->escape($this->userInput); ?>'>Test</span>
Stačí, když útočník podstrčí
' onmouseover='alert(/XSS/)
a Zend Framework si na tom vyláme zuby.Takže buď musíte vyvinout úsilí psaním vlastní ošetřovací funkce a velmi obezřetným vytvářením šablon nebo musíte použít externí šablony – třeba právě ty z Nette.
Ahoj Jakube, zdá se, že tvůrci ZF na tuto „feature“ moc pyšní nejsou a v ZF2 Roadmap (http://framework.zend.com/wiki/display/ZFDEV2/Zend_View+2.0) se objevuje zmínka, že by logika měla být naruby – tedy autoescape by default a raw values skrz volání metody. Aktuálně je venku beta2, která tuto změnu již implementuje.
Logika popsaná v Roadmap je zvrácená: něco ošetřené automaticky je, něco jiného ne a když chci přistoupit k neošetřené verzi něčeho, co se automaticky ošetřuje, tak abych si na to napsal metodu. Navíc problém s apostrofy zůstává nevyřešen.
Navíc současná implementace je tragédie – klasické předčasné ošetřování. Co asi vypíše následující kód?
Hádáte správně, že
a&lt;5
, po vyrenderování do HTML tedy a<5.Z mého pohledu je chování ZF2 ještě horší než ZF1.
S tímhle bohužel nemůžu než souhlasit. Je to naprosto otřesné.
Doufám (a rozhodně to zmíním na mailing listu), že se tohle do finální verze opravdu nedostane!
Takže Symfony2 je bezpečné jen proto, že prošlo auditem nějaké německé firmy, kterou navíc nikdo nezná? Tak to jo. Ale takovej audit si dokážu zaplatit taky, třeba na ten otřesnej Zend.
A ne, nepoužívám Nette. Nepřišel jsem mu na chuť. Ale v práci jsem ho jednu dobu používat musel a co se bezpečnosti týče, je na tom líp než většina ostatních.
Audit proběhl u SektionEins, což není nějaká neznámá německá firma. Stojí za ní Stefan Esser, což je zdaleka největší odborník na bezpečnost PHP na světě. Z jeho nedávných úlovků např. odhalený HTTP Response Splitting v jádře PHP. Mnozí budou znát i projekt SektionEins Suhosin nebo starší Month of PHP Security (kam jsem dva články napsal i já).
Takže než něco příště napíšete o neznámých firmách, tak si nejprve zjistěte, která firma na bezpečnost PHP je ta zdaleka nejznámější a nejpovolanější.
Nějak pořád ne a ne najít ten nový značkovací jazyk NEON. Mě to tady přijde podobné jako ini, yaml apod., značky jsou kde?
Však Neon je upravený Yaml.
Pokud se chcete dozvědět o neonu víc, doporučuji http://ne-on.org/.
mate tam nespravne okomentovanu triedu NeonEntity:
The exception that indicates error of NEON decoding.
> Nette Framework také přichází s novou a dokumentací.
http://doc.nette.org/cs/quickstart
http://i1.kym-cdn.com/entries/icons/original/000/005/545/OpoQQ.jpg