Názory k článku
Nette Framework: Chytré šablony
Syntaxe
celé vláknoTipnul bych si, že většina programátorů si pod tímto zápisem představí úplně něco jiného než vypnuté escapování. A to je IMHO největší problém u D.G. - on naprosto kašle na logiku syntaxe, viz Texy, která je totálním galymatyášem nejrůznějších typů závorek apod.
Co třeba noescape($item->name) .. nebo filtr @@$item->name | noescape@ ..
Re: Syntaxe
celé vláknoAle je pravda, třeba taková dvojtečka (to mě tak letmo napadlo) by byla asi lepší.
Re: Syntaxe
celé vláknoTzn. v (pod)šabloně může přesouvat, přidávat nebo ubírat vyjmenované parametry (např. {$zbozi->popis} ), jejichž seznam dostal, ale případné vykřičníky musí napřed konzultovat. :-)
Re: Syntaxe
celé vláknoZ tohohle letmeho pohledu na sablony Netty to vypada ze se k tomu idealu blizi alespon tak jako jine sablonovaci systemy, i kdyz neni nad zkusenosti z velkeho projektu, tam se teprv ukaze.
Co by mne osobne zajimalo mnohem vic je reseni podpory prekladu, jak by se pan tvurce Netty vyporadal s touhle ulohou tak aby to bylo pokud mozno efektivni na vsech urovnich, t.j. zatez serveru, srozumitelnost kodu a moznost nechat prekladat stranky lidi kteri o programovani nic nevi a veci jako escapovani & nebo jmena promennych jim nic nerikaji. (ze je naucim neprekladat jmena promennych, s tim se pocita, ale vysvetlovat jim kompletni zaludnosti syntaxe ruznych specialnich znaku nelze, takze idealni system prekladu tyhle veci pred nimi ukryje natolik, aby nemohli nic pokazit)
Osobne si myslim ze sablony jsou jakymsi prvym krokem k tomuhle idealu, ale zajimalo by mne jak by resil konkretni implementaci takoveho systemu, kdy si uzivatel nastavi ve svem profilu svuj jazyk a pak se mu web zobrazuje ve zvolenem jazyce.
Re: Syntaxe
celé vláknoNette ale nikomu nenutí používát nějaké konkrétní translatory/adaptéry, vyžaduje jen, aby implementoval rozhraní ITranslator, takže se dost dobře dá použít i ten ze Zendu, příklady implementace se dají nalést ve fóru. Podpora pro překlady je i ve formulářích, které jsou zmíněny některém z předchozím dílu seriálu.
Re: Syntaxe
celé vláknoNavic velka cast programatoru je schopna delat ve vice jazycich a tohle jim urcite problem cinit nebude
A zaverem: neni problem vzit sablonovaci system pana Grudla a prepsat si jeho "CurlyBracketsFilter" na "DoubleAtFilterWithEscapeCalledByFunctionFilter"
Re: Syntaxe
celé vláknoMě osobně přijde podstatně hezčí a lepší než například syntaxe Smarty. Navíc se
dá CurlyBracketsFilter velice snadno rozšířit o další makra a filtry. Opravdu nevím, proč bych měl psát noescape($item->name) .. nebo filtr @@$item->name | noescape@ - to je úplně psycho :)
Re: Syntaxe
celé vláknoRe: Syntaxe
celé vláknoRe: Syntaxe
celé vláknoRe: Syntaxe
celé vláknoNe, ale vážně, každý co potřebuje, ale mě přijde Texy syntaxe šitá
na míru BFU (a mě taky). Zase tolik pravidel tam není, ne? :)
Re: Syntaxe
celé vláknoNicmene je fakt, ze Texy syntaxe je podle me docela zverstvo :/
Re: Syntaxe
celé vláknoNaopak, Texy syntaxe je velmi elegantní. Sám jsem si dělal před pár lety vlastní wiki a vymýšlel vlastní syntaxy, aby byla co možná nejjednodušší… a když jsem pak viděl syntaxi Texy, byla mnohem jednodušší a intuitivnější něž ta moje.
RE: Nette Framework: Chytré šablony
celé vláknoRE: Nette Framework: Chytré šablony
celé vláknoRE: Nette Framework: Chytré šablony
celé vláknoRE: Nette Framework: Chytré šablony
celé vláknoPorad si myslim, ze by kod mel delat to co po nem chce programator, a ne delat to, co si mysli, ze by se programatorovi mohlo hodit, potom vznikaji bastly jako Sharepoint od M$.
Pane Grudl, je pekne ze se snazite zvysit bezpecnost, ale pouze lepite zaplaty na rany aby nebyly videt, misto reseni samotne priciny. (coz priznavam, nebude asi uplne jednoduche, jestli vubec mozne.)
RE: Nette Framework: Chytré šablony
celé vláknoA to se tady neděje? Když chci používat šablony, tak je používám ne? Kdyz použiji {$var} tak právě proto, že vím, že $var bude escapovaná a právě proto jsem to použil.
Nechce se mi psát echo htmlspecialchars($var). Opravdu nějak Váš příspěvěk nechápu.
RE: Nette Framework: Chytré šablony
celé vláknoA odkud prosím berete přesvědčení, že programátor NECHCE, aby se to automaticky escapovalo? To je nějaký axiom nebo dogma…?
RE: Nette Framework: Chytré šablony
celé vláknoNo a tohle je úplně směšné! Co že nám to tu vlastně sdělujete? Že je pan Grudl lepič záplat? Že je mnohem lepší řešit příčinu? Ale že to možná nejde? A máte pro nás ještě nějaký názor?
RE: Nette Framework: Chytré šablony
celé vláknoJe zbytečné se rozčilovat, zkuste si článek přečíst ještě jednou, nebo úplně nejlépe, vyzkoušet si to na svém počítači a rychle pochopíte, jak je řešení příjemné a užitečné.
RE: Nette Framework: Chytré šablony
celé vlákno1. programátor/kodér potřebuje proměnný text na základě vnějšího vstupu.
2. Často je potřeba to nějakým způsobem escapovat.
3. Obě varianty by si zasloužily trošku zkrátit.
---
Jako logické řešení se nabízí tedy k oboum variantám nabídnout kratší varianty a to tak, že se obě budou zapisovat jinak. Sedí?
Další věcí je, že si o to programátor musí říct sám pomocí CBF, protože nikde není psáno, že to musí chtít vždy.
Tak co, pokud jsem z toho vynechal syntaxi, vidí na tom někdo něco špatného?
Kontextově závislé escapování
celé vláknoEscapování závislé na kontextu je chytré (a v Nette elegantně implementované), opsal to dokonce už i Google :-).
Pro úplnost bych dodal, že automatické escapování funguje jen v kontextu HTML textu, HTML atributu uzavřeného do uvozovek nebo apostrofů, CSS ve značce <style> a JavaScriptu ve značce <script>. Pokud by nějakého blouda napadlo uživatelský vstup použít třeba na místě názvu HTML značky, tak to fungovat nebude, stejně tak nebude fungovat JS a CSS ošetřování uvnitř atributů style a on* (to už by smysl dávat mohlo, ale lepší je to vyčlenit mimo HTML kód).
Re: Kontextově závislé escapování
celé vlákno(S tím Googlem jsi mě dostal. Takže nejenom Microsoft kopíruje Nette ;-)
Re: Kontextově závislé escapování
celé vláknoRe: Kontextově závislé escapování
celé vláknops. Taky bych se šel klouzat. Kde se dá jít v tuhle roční dobu klouzat?
RE: Nette Framework: Chytré šablony
celé vláknoKodér přece nepotřebuje vědět o nějakém XSS, escapování a bůhví o čem ještě. Potřebuje znát HTML a syntaxi Nette šablon... Pak mu stačí říct, že když přidá před proměnnou !, vypíše se mu čisté HTML. Osobně považuji XSS, stejně jako SQL Injection a další možné útoky, za záležitost aplikace a programátora. Šablona je pouze výpis dat, sama o sobě už nemá nic ošetřovat, jen vypsat co dostane. Ošetřit to má aplikace.
Nette data implicitně ošetřuje a je to tak správně. Představte si, že předáte šablony někomu jinému a on by tam místo {!$var} našel nějakou šílenost... Zabije vás :) Takhle mu stačí říct, že ! vypíná escapování, případně mu ukázat co tím je myšleno. Hotovo, tečka.
Šablony jsou přece k výpisu dat, ne k dalšímu programování...!
Ikdyby David nakrásně vymýšlel zcela nová pravidla programování, převracel PHP vzhůru nohama a tvrdil, že nejlepší webovky uděláte Assemblerem, tak je to jeho věc. Nikdo vás Nette používat nenutí.
BTW: Nedávno jsem se ucházel o práci v jisté firmě a mezi požadavky byla znalost Nette frameworku. Takže buď tam zaměstnávají tupce nebo Nette opravdu má něco do sebe ;)
Kdyby se každý držel zaběhlých postupů tak urputně jak to tu někteří předvádějí, tak ještě dneska sedíme v jeskyni a šutrem škrábeme obrázky na její stěnu :))
RE: Nette Framework: Chytré šablony
celé vláknoA bude hůř, to je jen začínající trend (nemyslím konkrétně jen Nette, ale obecně frameworky nebo pomocné nástroje).
RE: Nette Framework: Chytré šablony
celé vláknoZnalost XSS autorem šablon
celé vlákno1. Pokud zná HTML, nemělo by to pro něj být problém.
2. Na XSS je řada možností, vč. url.
3. Srovnání s SQL Injection nesedí - SQL se typicky používá v modelu, zatímco HTML, JS, CSS (...) v šabloně/statické. To je asi hlavní odlišnost.
Hezká URL v Coffe Machine
celé vláknoDobrý den,
zkoušel jsem přetvořit router tak, aby vytvářel „hezká“ url, avšak nepodařilo se mi to, proto bych se chtěl zeptat jak na to.
Změněný kód v bootstrap.php:
// Step 4: Setup application router
$application->setRouter(new SimpleRouter(‚Machine:default‘));
$router = $application->getRouter();
// přidáme routu, objekt Route do MultiRouteru
$router[] = new Route(‚<presenter>/<action>/<coin
[0–9]+>‘, array(
‚presenter‘ ⇒ ‚Machine‘,
‚action‘ ⇒ ‚default‘,
‚coin‘ ⇒ NULL,
));
Vygenerovaná url je však ve tvaru:
http:test.localhost/machine/default/5?do=insert
Šablonovací systém Grudly
celé vláknoLíbí se mi že Grudly je podobný Smarty a navíc řešít třeba výpis v JS :)
good work