#1 6. 1. 2009 16:56

danaketh
Člen
Místo: Praha
Registrovaný: 27. 12. 2008
Příspěvky: 23
Web

Bezpčené přihlášení a držení uživatelské session

Zdravím,

stále častěji na webu narážím na hlášku „Pro přihlášení musíte mít povolené koláčky“. Právě přepisuji autorizační knihovnu kterou používám ve svém rádobyframeworku a rád bych vyřešil otázku přihlašování co nejbezpečněji. Proto bych se rád zeptal jakým způsobem řešit přihlašování a ověřování přihlášeného uživatele. Dosud jsem používal buď $_SESSION, do které jsem si uložil potřebné informace a pak ověřoval její existenci nebo jsem webové rozhraní uzavřel do chráněného adresáře.

V souvislosti s výše zmíněnou větou o koláčcích usuzuji, že lepší/bezpečnější je používat právě koláčky ale než něco takového implementuji, tak si raději nechám poradit jak se k tomu postavit, na co si dávat pozor atd.

Díky za odpověď :)


Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.

Offline

 

#2 6. 1. 2009 17:31

Martin Mates
Člen
Místo: Praha
Registrovaný: 4. 11. 2008
Příspěvky: 176
Web

Re: Bezpčené přihlášení a držení uživatelské session

K tomu, aby fungovaly SESSION je zapotřebí, aby měl uživatel povolené COOKIES (pokud tedy nechceš session id posílat v adrese, což je, pokud vím, považováno za bezpečnostní díru). Takže proto to nejspíš mají všude napsáno.

Jinak, jak pracovat se SESSION přihlášeného uživatele co nejbezpečněji bych nechal na někom zkušenějším. Řeším to běžně asi podobně jako ty. Teď jsem začal používat Nette framework a ten to má celé ošetřené, doporučuju (http://nette.org/…uthenticator)


Java is to JavaScript like ham is to hamster. (www.martin-mates.cz)

Online

 

#3 7. 1. 2009 0:01

srigi
Člen
Místo: BA
Registrovaný: 6. 1. 2009
Příspěvky: 161
Web

Re: Bezpčené přihlášení a držení uživatelské session

Odporucam jednoducho povolene COKKIEs vyzadovat (dnes to ma zakazane iba malokto, napr. Věra Pohlová :D ). Prenasat PHPSESSID v URL vobec neodporucam.

Pre zlepsenie bezpecnosti je vhodne PHPSESSID vdzy nanovo vygenerovat pomocou fnce session_regenerate_id(), hned po volani session_start(). Zabrani sa tak utoku nazvanemu session fixation.

Editoval srigi (7. 1. 2009 0:02)


developing on Arch linux, Apache 2.2.15, PHP-5.3.2 (mod_php5), Mysql 5.1.47 :: www.twitter.com/srigi

Offline

 

#4 7. 1. 2009 1:28

danaketh
Člen
Místo: Praha
Registrovaný: 27. 12. 2008
Příspěvky: 23
Web

Re: Bezpčené přihlášení a držení uživatelské session

PHPSESSID v URL považuju za prasárnu od prvních krůčků v PHP :) Nějak mi ale uniklo, že session bez koláčků ne-e. Díky za tip se session_regenerate_id(), hned jsem to připsal.

Martin: mrknu se na to. Nette se mi tu povaluje ku testování a budoucímu využití na jednom rozměrnějším projektu.


Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.

Offline

 

#5 7. 1. 2009 16:36

Tomik
Nette Evangelist
Místo: Roztoky
Registrovaný: 20. 3. 2005
Příspěvky: 565
Web

Re: Bezpčené přihlášení a držení uživatelské session

Nette se o toto (pokud si to člověk nepředefinuje) stará samo. A stará se o to dobře – nemusíš se tedy bát o bezpečnost svých aplikací. Takže doporučuju! :)

Jinak rozdíl mezi SESSIONS a COOKIES je ten, že SESSIONS jsou už od začátku (a automaticky) zahashovaná, a ukládají se na straně serveru, zatímco COOKIES se ukládají na straně klienta, při vyžádání SESSIONS server vydá PHPku daný soubor dat pouze pokud je v COOKIES uvedena stejná hodnota, pod kterou byla daná hodnota uložena, pokud ne, je uživatel odhlášen.

COOKIES vydá PHPku klient (tedy prohlížeč) v podstatě komukoli ze stejné domény, tzn. jedná se o mnohem větší bezpečnostní riziko.

Offline

 

#6 7. 1. 2009 19:33

Warden
Člen
Místo: Praha
Registrovaný: 20. 4. 2008
Příspěvky: 467
Web

Re: Bezpčené přihlášení a držení uživatelské session

Doporučuji nastudovat něco o session hijacking – něco na blogu Jana Tichého dále na blogu Jakuba Vrány případně strejda Google :)

Offline

 

#7 8. 1. 2009 0:20

Kevujin
Člen
Registrovaný: 6. 1. 2009
Příspěvky: 11

Re: Bezpčené přihlášení a držení uživatelské session

Tomik napsal(a):

Nette se o toto (pokud si to člověk nepředefinuje) stará samo. A stará se o to dobře – nemusíš se tedy bát o bezpečnost svých aplikací. Takže doporučuju! :)

Jinak rozdíl mezi SESSIONS a COOKIES je ten, že SESSIONS jsou už od začátku (a automaticky) zahashovaná, a ukládají se na straně serveru, zatímco COOKIES se ukládají na straně klienta, při vyžádání SESSIONS server vydá PHPku daný soubor dat pouze pokud je v COOKIES uvedena stejná hodnota, pod kterou byla daná hodnota uložena, pokud ne, je uživatel odhlášen.

COOKIES vydá PHPku klient (tedy prohlížeč) v podstatě komukoli ze stejné domény, tzn. jedná se o mnohem větší bezpečnostní riziko.

no chlape, myslím, že jsi to popsal dost nešťastně. raději jsi měl napsat, že session se identifikuje pomocí cookie, která obsahuje název session a její hodnotu (onen hash). ten se pak na serveru spáruje s existující session (pokud existuje) a tím se do aplikace dostanou data v oné session. takže session se ukládají nejen na straně serveru, ale její identifikátor i na straně klienta. to s tím odhlášením taky není pravda, záleží na programátorovi aplikace, co s tím provede.

jo cookies rozhodně nevydá někdo jen tak někomu a ani na stejné doméně (parametr path v setcookie). a pak taky ještě existujou další formy cookies (implementovaný prohlížečem) jako např. http only cookie atp. ale tohle už záleží, jak má prohlížeč nastaven. klidně může veškerej obsah cookies někam posílat (google sběrna atp.).

Offline

 

#8 8. 1. 2009 1:45

romansklenar
Moderator
Místo: Ostrava
Registrovaný: 20. 7. 2008
Příspěvky: 774
Web

Re: Bezpčené přihlášení a držení uživatelské session

Sessions a cookies jsou ty místa ve webových aplikacích, které dělají začátečníkům problémy, případně nechávají bezpečnostní díry při špatném používání. Je dobré si práci s nima si nějak zastřešit a zautomatizovat.

Nette\Web\Session ji právě hezky zapouzdřuje a zjednodušuje na maximum, krásně to ukazuje práce například s nastavením expirace.

Práce s uživateli, autorizace a autentizace je pak hodně podobná – rozumněj stejně jednoduchá :-) jelikož využívá té práce se session.

Minimálně jako inspirace ti to může pomoct, ale není nad to si Nette vyzkoušet ;-) a protože se na to rychle zvyká, tak se ti už třeba nebude chtít zpět k čistému phpčku jako mě – každý přechod zpět velmi těžce psychicky nesu a moji práci doprovázejí nespisovná slova :(

EDIT: Co jsem chtěl ale zmínit a na co jsem zapomněl je, že samotné bezpečné naprogramování nemusí nutně znamenat, že je vše v bezpečí.

Editoval romansklenar (8. 1. 2009 2:12)

Offline

 

#9 8. 1. 2009 18:58

Tomik
Nette Evangelist
Místo: Roztoky
Registrovaný: 20. 3. 2005
Příspěvky: 565
Web

Re: Bezpčené přihlášení a držení uživatelské session

Kevujin napsal(a):

no chlape, myslím, že jsi to popsal dost nešťastně. raději jsi měl napsat, že session se identifikuje pomocí cookie, která obsahuje název session a její hodnotu (onen hash). ten se pak na serveru spáruje s existující session (pokud existuje) a tím se do aplikace dostanou data v oné session. takže session se ukládají nejen na straně serveru, ale její identifikátor i na straně klienta. to s tím odhlášením taky není pravda, záleží na programátorovi aplikace, co s tím provede.

jo cookies rozhodně nevydá někdo jen tak někomu a ani na stejné doméně (parametr path v setcookie). a pak taky ještě existujou další formy cookies (implementovaný prohlížečem) jako např. http only cookie atp. ale tohle už záleží, jak má prohlížeč nastaven. klidně může veškerej obsah cookies někam posílat (google sběrna atp.).

Ano, máš pravdu. Nešťastně jsem to formuloval.

Offline

 

Zápatí