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?
Názory k článku
Nette Framework: Neprůstřelné formuláře II
Re: Form::MIME_TYPE
celé vláknoTo 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
celé vláknoUz ten serial natahujes a delas kapitoly kratsi, kvuli financim za autorstvi nebo jsem jen ja nedockavejsi? :-)
Re: kratsi a kratsi
celé vláknoRedakční poznámka: Davidovy články jsou po dohodě s autorem od začátku celého seriálu nehonorované.
Validacni pravidla
celé vlákno…->addRule(‚myValidator‘, ‚Číslo musí být dělitelné %d.‘, 8);
používat něco jako (řešení používané např v extGWT [Java]):
email = new TextField();A třída validátoru např.
email.setValidator(new EmailValidator());
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
celé vlákno„Příště se podíváme na možnosti vykreslování formulářů.“
GRRRR!!!!!!
Dotázek
celé vláknoTentokrá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
celé vláknoU 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
celé vlákno… 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
celé vláknoA 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
celé vláknoMilý 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
celé vláknoPravda, 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
celé vláknoNesouhlasí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?
celé vlákno$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?
celé vláknoaddProtection() 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?
celé vláknoExistuje v Nette validacia datumu? Kontrola ci je datum v urcitom rozsahu?