ochrana pred CSRF

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
founder | 8310
+
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
founder | 8310
+
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]

RSS tématu Téma zavřeno