Bezpečnější formuláře – hash

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jean_cz
Člen | 12
+
0
-

Jsem v nette začátečník, proto mě prosím omluvte jestli následujicí námět je blbost, ale:

Je úplně běžné, že data, která se vráti z formuláře se rovnou předávájí nějakému modelu pro zpracovaní, typicky uložení do db.

Může se ovšem stát, že uživatel javascriptem trochu formulář pozmění třeba „name“ tag nebo si nějaká ta formulářová pole přidá. Ve výše popsaném případě se toto pole může dostat až na úroveň DB což v určitých případech může způsobit problém.

Ideální by bylo kontrolovat na úrovni serveru jestli se v requestu shodují formulářová pole. Napadlo mě tuto kontrolu řešit hashem. Nad každým formulářem by se spočítal hash z „name“ tagu všech formulářových polí + nějaký salt. A tento hash by se odeslal spolu s formulářem třeba v hidden poli. Při validaci formuláře by se pak spočítal tento hash znovu a porovnal s obdrženým.

Problém by mohly dělat úmyslné dynamické formuláře a samozřejmě axaj, ale asi by to bylo také řešitelné.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Vždyť by to bránilo jakýmkoliv změnám jakýchkoliv hodnot ve formuláři… „je úplně běžně“ lze taky číst „každý kašle na bezpečnost“. Řešení je to tak prostě nepředávat.

Šaman
Člen | 2666
+
0
-

Ten, kdo ukládá data z formulářů rovnou do db a ještě jako názvy sloupců používá názvy formulářových polí zaslouží pověsit za uši do komína. Podvrhnout data je jednoduché – není potřeba řešit nic pomocí JS, stačí upravit parametry v POST nebo GETu a může být problém.

Za validní data zodpovídá model, takže ať už přijme cokoliv, měl by si to na vstupu přebrat a pokud zjistí, že má v poli něco navíc, tak to prostě zahodí.

Jinak pokud má každé pole validační pravidlo, tak si myslím, že změnit název pole nepůjde, resp. zařve serverová validace.
Je to ještě jednodušší, viz následující komentář.

Editoval Šaman (24. 3. 2013 15:50)

David Matějka
Moderator | 6445
+
0
-

podvrhnout to muzes jak chces, ale nette ti v $form->values vrati jen hodnoty inputu, ktere byly nakonfigurovane, viz https://api.nette.org/…ner.php.html#107

jean_cz
Člen | 12
+
0
-

Ok, díky za vaše názory a vysvětlení.