Komentáře k článku
Nette Framework: Neprůstřelné formuláře II

Validační pravidla formulářů mohou být komplikovaná, pojďme se proto podívat, jak vyždímat z Nette Framework maximum.

Validační pravidla formulářů mohou být komplikovaná, pojďme se proto podívat, jak vyždímat z Nette Framework maximum.
Form::MIME_TYPE
Zajimalo by me, jak spolehlive je rozeznavani MIME-TYPE v Nette. Dokaze
odhalit i pokud si nekdo pohraje s hlavickou odpovedi a mime type prepise na
falesnou hodnotu? Aneb kontroluje se jen hodnota, ktera prijde v odpovedi, nebo
jsou pouzity nejake slozitejsi postupy?
Re: Form::MIME_TYPE
To je dobrá otázka, nikdy by se nemělo věřit datům odesílaným
uživatelem.
V PHP 5.3 se typ zjišťuje analýzou obsahu souboru, informace zaslaná
browserem se rovnou zahazuje. V PHP 5.2 není ještě tahle funkce nativní,
takže se zkouší další dvě metody a teprve když není nic k dispozici,
vrátí se hodnota zaslaná prohlížečem.
Ve frameworku je nástroj Requirements-Checker, který ověřuje konfiguraci
serveru a oznámí, jestli je přítomna nějaká chytřejší funkce pro
detekci MIME-type, nebo se na hodnotu nelze spoléhat.
kratsi a kratsi
Uz ten serial natahujes a delas kapitoly kratsi, kvuli financim za autorstvi
nebo jsem jen ja nedockavejsi? :-)
Re: kratsi a kratsi
Redakční poznámka: Davidovy články jsou po dohodě s autorem od
začátku celého seriálu nehonorované.
Validacni pravidla
Nebylo by „hezčí“ (minimálně z pohledu intellisync :-) místo řetězce
určujícího validátor
používat něco jako (řešení používané např v extGWT [Java]):
A třída validátoru např.
public class EmailValidator implements Validator {public String validate(Field f, String value) {
if (nejaka_podminka) {
return null;
} else {
return „chybova hlaska“;
}
}
}
Poznámka: co mám použít v komentářích, aby html tag „pre“
fungoval tak, jak by měl (zachovával formátování – mezery,
řádkování…)?
Ach jo
„Příště se podíváme na možnosti vykreslování formulářů.“
GRRRR!!!!!!
Dotázek
Tentokrát je to spíš jen popis části API, takže není co hodnotit
(jedině že bych opět jako minule zkritizoval konfiguraci zadrátovanou do
kódu, ve srovnání třeba se Symfony a tamními jednoduchými YAML
konfiguráky) …
Ale jeden dotaz bych měl – když jsem se podíval do kódu Nette, tak to
vypadá, jako že validace je pevně vázána na formuláře – to se opravdu
uvažuje se vstupem dat jen přes formulářová pole?? Jiné frameworky
mívají validační moduly samostatně …
Re: Dotázek
U YAMLu je velká režie na zpracování, potažmo nutné cachování.
Ostatně dnes už v Symfony ani yaml validátory nejsou.
Re: Dotázek
… dnes už v Symfony ani yaml validátory nejsou … „Dnes“ je snad
ještě pořád 1.2 a tam jsou (?)
Jinak to byl příklad, někdo má raději XML nebo INI.
Re: Dotázek
A někdo má raději konfiguraci ve formátu PHP – nemusí kvůli ní
měnit IDE ani jazyk, a hlavně, má podporu debuggeru – můžu si na
vytvoření validační podmínky dát breakpoint, kouknout se na příslušnou
datovou strukturu, a krokovat přidávání prvků do formuláře, to
u XML/INI/whatever dost dobře nejde.
Jsem rád, že Nette podporuje konfiguraci formulářů v jazyce PHP
(Davide, nový bullet-point do feature listu :))
Re: Dotázek
Milý Tomáši Kafko, vaše osobní preference nechme stranou, ale jednak asi
používáte špatné IDE, když nezvládá elementární formáty a jednak,
budete se divit, debugovat jdou stejně dobře.
Že Nette umí formuláře v PHP je nečekaný zázrak přímo epických
rozměrů (Davide, bullet rozhodně!)
Re: Dotázek
Pravda, asi jsou, kvůli zpětné kompatibilitě, nicméně s 1.1 přišly
symfony forms které yaml nepoužívají – jsou takřka okopírované od
Zendu s tím, že je Symfony umí automaticky generovat(kam se hrabe Nette :P).
Ale jinak to správný příklad celkem je, na yamlu/xml stojí celý základ a
od 2.0 by se měl přidat ještě takto konfigurovatelné dependency
injection.
Nicméně u komplexnosti Symfony to dává smysl, u Nette to asi nebude
dvakrát žádoucí…
Re: Dotázek
Nesouhlasím s tím, že Symfony forms jsou odvozené ze Zend_Form. Nette
má k Zend_Formu mnohem blíž. Symfony forms mi přijdou vzdálenější.
ochrana před CSRF?
$form->addProtection(‚Vypršel ochranný časový limit,
odešlete prosím formulář ještě jednou‘); Tohle že ochrání
před Cross-Site Request Forgery (CSRF) nebo XSS?
Tohle nanejvýše ochrání před (CSRF) nebo XSS pokud útok proběhne
po timeoutu, ale ne obecně. Pokud bude timout dlouhý, bude dlouho
otevřena možnost k útoku. Pok bude krátký, bude uživatele prudit
odesílat formulář znova (a nejspíše ho serverem znova vygenerovat a
vypnit).
Re: ochrana před CSRF?
addProtection() nechrání přes XSS, to dělají formuláře automaticky.
Tohle se používá jako ochrana proti CSRF.
Délka timeoutu není rozhodující, chrání to spolehlivě nezávisle na
timeoutu. Nebo jste našel v kódu nějakou chybu?
Existuje validacia datumu?
Existuje v Nette validacia datumu? Kontrola ci je datum v urcitom rozsahu?