ochrana pred CSRF
- crempa
- Člen | 198
Zdravim,
zprovoznil jsem autorizaci uzivatelu pres Nette\Web\User a zajimalo by me zda a
jak je vzhledem k vyuziti cookies resen utok typu CSRF.. nebo je nutne toto
resit az aplikacne v ramci projektu?
Dal by me pak jeste zajimalo zda muzu nejak dosahnout presmerovani na urcity presenter:view v pripade expirace prihlaseneho usera (tj. nejlepe zase k logovacimu formulari, ale jeste s hlaskou typu „z duvodu delsi necinnosti jste byl automaticky odhlasen“).
A posledni detail; netusite zda se kontroluje pri sezeni uzivatele zda nedoslo ke zmene prohlizece / ip adresy atd. ? Narazim na pripad zachyceni susenky cestou k serveru u nesifrovaneho spojeni.. pochopitelne lze falsovat i toto info, ale jako znesnadneni jsem to pred nette pouzival…
Diky za postrehy a pekny vikend
- romansklenar
- Člen | 655
crempa napsal(a):
Zdravim, zprovoznil jsem autorizaci uzivatelu pres Nette\Web\User a zajimalo by me zda a jak je vzhledem k vyuziti cookies resen utok typu CSRF.. nebo je nutne toto resit az aplikacne v ramci projektu?
Něco k XSRF a CSRF bylo psáno tady.
Dal by me pak jeste zajimalo zda muzu nejak dosahnout presmerovani na urcity presenter:action v pripade expirace prihlaseneho usera (tj. nejlepe zase k logovacimu formulari, ale jeste s hlaskou typu „z duvodu delsi necinnosti jste byl automaticky odhlasen“).
Klasicky jak je třeba v Akrabatu: buď ve startupu nebo v konkrétnějším action{Action} provedu kontrolu přihlášení:
/**
* View Edit action method
* @param string $id identificator of page that has to be edited
* @return void
*/
public function actionEdit($id)
{
// somewhere before this code, for example in common ancestor, use this to store your current request:
// $this->backlink = Environment::getApplication()->storeRequest();
// user authentication
$user = Environment::getUser();
if (!$user->isAuthenticated()) $this->redirect(':Admin:Auth:login', $this->backlink);
// if is user authenticated, continue ...
}
A k té hlášce: je otázka jak je uživatel odhlášen po nečinnosti – zůstane mu identita? Pokud ano, dalo by se to k tomu snad využít.
- crempa
- Člen | 198
Tak jsem to ted zlehka otestoval a nekontroluje se ani referer… Neresite nekdo snadnou implementaci formou tokenu (nejspis v URL) a nebo jeste lepe preneseni cele logiky identifikace uzivatele z cookies do URL ? V soucasnem stavu je dana autorizace pro pouziti napriklad ve viceuzivatelskych CMS vicemene nepouzitelna..
- Jan Tvrdík
- Nette guru | 2595
netusite zda se kontroluje pri sezeni uzivatele zda nedoslo ke zmene prohlizece / ip adresy atd. ?
To že se uprostřed sezení změní IP adresa neznamená, že se jedná a útok. U některých poskytovatelů internetu (hlavně zahraničních) je změna IP adresy v rámci jednoho sezení běžná praxe.
- crempa
- Člen | 198
tak s tou zmenou IP sem netusil, diky za postreh…
Jinak jeste dotaz k dokumentaci.. lze nejak rozvest tvrzeni „Přihlašování vyžaduje u uživatele povolené cookies; jiná metoda přihlašování není bezpečná!“ ? Neni me moc jasne jak je to mysleno, jakou bezpecnostni vyhodu maji cookies oproti prenaseni tokenu (resp. authid) v URL napriklad (pokud teda pominu esteticky fakt ) ?? Podle me jsou cookies jednodussi z hlediska implementace, ale nevyhodou je ona CSRF zranitelnost a pak odstrihnuti uzivatelu kteri nemaji cookies povolene..
- romansklenar
- Člen | 655
On to říkal David na školení :) podle mě se to týká výchozí autentizace v Nette – bez cookies nepojede. Jak je na tom tahle metoda bezpečná v porovnání s ostatníma to nevím (tomu zrovna nekraluju), ale dělám teďkom úpravy na webu, kde je autentizace řešena přenašením tokenu a je to to tam naimplementované tak blbě, že pokud jsem přihlášený do administrace a pošlu ti URL, ty na ni vlezeš, tak jsi přihlášený taky :) …nechcu téhle firmě dělat špatnou reklamu, ale pokud jste někdy byli na abclinuxu, určitě jste si jejího názvu všimli.
- crempa
- Člen | 198
Aha, no budu rad pokud se k tomu David vyjadri, celkem me tahle zelezitost tizi.. pro nejakou intranet aplikaci cookies prosim, ale napsat na tom eshop bych si proste netroufnul…
K tomu co pises, ono muzes generovat nove authid do URL po kazdem requestu cimz automaticky zneplatnis tu posledni, pak pokud me posles URL kterou mas v radce tak uz se nikam nedostanu, pokud to zkombinujes nejakou kontrolou hashe podpisu prohlizece tak je to uz snad celkem secure. Problem u tohoto pristupu je ze v aplikaci nepujde pouzivat klasicky reload, zpet apod. Proto jsem v predchozich projektech generoval jedno authid na cele sezeni a kontroloval ten hash podpisu prohlizece spolu jeste s IP (coz dle poslednich komentaru mohlo nekomu privodit problem – ale bylo to jen v ramci CR a netusmm zda tu nejake podobne praktiky se zmenou IP provadi i nektery z mistnich ISP)…
- David Grudl
- Nette Core | 8218
crempa napsal(a):
Jinak jeste dotaz k dokumentaci.. lze nejak rozvest tvrzeni „Přihlašování vyžaduje u uživatele povolené cookies; jiná metoda přihlašování není bezpečná!“ ?
Spíš než přihlašování by tam mělo být sessions. Ty vyžadují cookies. Lze to sice změnit (přenášet session id přes URL), ale uděláte tím do aplikace bezpečnostní díru.
- David Grudl
- Nette Core | 8218
crempa napsal(a):
Zdravim,
zprovoznil jsem autorizaci uzivatelu pres Nette\Web\User a zajimalo by me zda a jak je vzhledem k vyuziti cookies resen utok typu CSRF.. nebo je nutne toto resit az aplikacne v ramci projektu?
Ochranu před CSRF útokem mají formuláře. Asi by se dalo něco podobného použít i pro odkazy, ale zatím do ve frameworku není.
A posledni detail; netusite zda se kontroluje pri sezeni uzivatele zda nedoslo ke zmene prohlizece / ip adresy atd. ?
Ano, některé hlavičky se kontrolují.
- crempa
- Člen | 198
Diky za reakci,
na ty formulare jsem koukal a tam je reseni diky hidden celkem na snade, momentalne koumu jak by se to dalo implementovat i do odkazu, ale vzhledem k tomu, ze jsem jeste 100% nevstrebal router tak si nejsem uplne jistej… nejaka reseni pomoci foo parametru do routovani me sice napadla ale mam porad pocit, ze by to slo urcite mnohem elegantneji… :-)
Mam se to pokouset nejak dal „hackovat“ nebo myslis, ze se to v Nette objevi ? (popravde me to prijde jako celkem dulezita vlastnost..)
Jinak pouziti cookies je asi bez problemu, mel jsem za to ze byvaji casto vypnute, ale statistiky me presvedcily o opaku.. [vice zde]