ochrana pred CSRF

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

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
+
0
-

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
+
0
-

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..

Ola
Člen | 385
+
0
-

CSRF od Davida nativně: 941-rev-106-obrana-pred-cross-site-request-forgery-ve-formularich

Editoval Ola (29. 11. 2008 19:44)

crempa
Člen | 198
+
0
-

Jo to jsou formulare, ale to vazne vsichni pisou aplikace kde se veskere „invazivni“ operace v datech provadeji jen na popud „odeslani formulare“… ??

Jan Tvrdík
Nette guru | 2595
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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]