Novinky v Nette Forms 3.1
Ochrana před CSRF pomocí cookie
Zranitelnost CSRF spočívá v tom, že formulář je podvržen útočníkem
a odeslán z jeho stránky, tedy i z jiné domény, proti čemuž má Nette
odjakživa ochranu, kterou zapíná metoda addProtection(). Tuto
ochranu doplňuje nová a plně automatická ochrana pomocí cookie
s příznakem SameSite. Formuláře v Nette Application se tak chrání již
od verze 3.0 a nyní přichází na řadu i samostatně používané
(standalone) formuláře.
			Volání addProtection() má stále význam i přesto, že
prohlížeče, které SameSite nepodporují, pomalu mizí. Problém by mohl
nastat ve chvíli, kdy by se někdo zmocnil subdomény např.
foo.example.com a tam vytvořil cookie. Ta má totiž stejný
„site“ jako subdoména www.example.com a cookie by se tak
odeslala i na požadavek na www.example.com.
Standalone formulář odešle cookie automaticky. Předpokládá se, že
formulář vytváříte v době, kdy ještě hlavičky nejsou odeslané,
protože zpravidla po úspěšném zpracování formuláře následuje
přesměrování na jinou stránku, což se hlavičkou realizuje. Pokud
z nějakého důvodu narazíte na problém, že hlavičku už nelze odeslat,
můžete tak učinit dříve pomocí
Nette\Forms\Form::initialize().
Pokud tuto ochranu chcete vypnout a tedy umožnit, aby formulář šel
odeslat z jiné domény, použijte $form->allowCrossOrigin().
To platí i pro formuláře z Nette Application.
Bezpečnější
chování onSuccess, onClick a
getValues()
Metoda setValidationScope() slouží k omezení prvků, které
se mají při odeslání určitým tlačítkem validovat. Jen ty prvky, které
se validují, jsou nyní uvedeny v proměnné $values předávané
handlerům událostí onSuccess a onClick. Ve
$values tak nebudou nevalidovaná data.
Stejná změna se týká metody $form->getValues(), která
nyní také vrací jen validované prvky. Navíc, pokud getValues()
zavoláte dříve, než proběhla validace, Nette vás upozorní
varováním.
Pokud z nějakého důvodu potřebujete získat hodnoty všech prvků
nezávisle na validaci, tak jak to dělalo getValues()
v předchozích verzích, použijte novou
metodu $form->getUntrustedValues()
Mimochodem, pokud v handleru pro onSuccess či
onClick nepotřebujete objekt formuláře ale jen hodnoty, můžete
parametr $form vynechat ($values musí mít
typehint):
public function formSucceeded(array $values): void
{
	...
}
Srozumitelnost
Kvůli lepší srozumitelnosti byla přejmenována metoda
Checkbox::getSeparatorPrototype() na
getContainerPrototype() a dále Form::addImage() na
addImageButton(). Samozřejmě nadále fungují původní názvy
jako aliasy.
Další
Pravidlo Form::URL nyní doplňuje chybějící protokol
https místo http, takže pokud uživatel zadá
nette.org, výsledná hodnota bude
https://nette.org.
Metoda $vals = $form->getValues(FormData::class) vrací
hodnoty mapované na objekt dané třídy. Nyní lze použít i hydrataci
pomocí $vals = $form->getValues(new FormData).
Formuláře již nevytváří v šabloně proměnné $_form,
které jsou deprecated od Nette 2.4.
Minimální požadovaná verze PHP je 7.2.
	
			
			
			
Komentáře
super
Skvělý
Chcete-li odeslat komentář, přihlaste se