Autor Zpráva
Spectator
Profil
Stále nevim, co používat na uchovávání informací o uživateli. Cookies nebo Sessions?
Co z toho je bezpečnější a co funguje více méně všude?
Podle hledání vypadají cookies jako jednodušší a nebezpečnější varianta přihlašování. Je to tak?

Díky. Rád bych si jednou pro vždy ujasnil tyto dva pojmy.
AM_
Profil
Obojí slouží k něčemu jinému. Cookies slouží k trvalému uchování informace v prohlížeči svázané s danou www doménou, sessions slouží k uchování informace na straně serveru vztahující se ke konkrétnímu návštěvníkovi po dobu sezení (session) - defaultně po 24 minutách neaktivity uživatele se zneplatní/smaže. Aby mohly sessions rozumně fungovat, musí být zapnuté cookies, kam se uloží unikátní identifikátor (PHPSESSID), který pomůže serveru rozeznat návštěvníky a přidělit jim vlastní session (PHP sice toto umí obejít tak, že do všech odkazů na stejnou doménu vecpe parametr PHPSESSID, ale je to dost oškivé a ne moc spolehlivé).

Na uchovávání informací o uživateli je nejlepší databáze, při přihlášení stačí ověřit, že uživatel zadal správné heslo, a pak do SESSION (SESSION, ne COOKIE) uložit informaci, že uživatel je přihlášen - důležitý rozdíl je, že COOKIE může uživatel ručně upravit, SESSION ne (tu si může maximálně smazat smazáním PHPSESSID).
ShiraNai7
Profil
- informace o přihlášeném uživateli (ID atd) uchovávej v SESSION, která je uložena na serveru a uživatel k ní nemá přímý přístup
- v COOKIE je uloženo ID SESSION (tj ukazatel na data na serveru nikoliv data samotná)

Pro zvýšení bezpečnosti se dá přejmenovat cookie kterou PHP sessions generuje a také vázat session na konkrétní IP adresu.
Spectator
Profil
Takže na přihlašování je rozhodně bezpečnější SESSIONS z důvodu nemožnosti měnit jejich obsah uživatelem.
COOKIES je spíš na takové věci jako uložení vzhledu webu a podobně.
Radovan789
Profil *
AM: COOKIE může uživatel ručně upravit, SESSION ne
Takže kdyby někdo ukdardl SESSIONID tak mu je na nic ? Četl jsem něco jiného.
Keeehi
Profil
Radovan789:
Pokud session svážeš z určitou IP a třeba ještě s prohlížečem, pak bude zlodějovi na nic. Pokud to neuděláš, možná se mu povede, že bude přihlášen. Proto je dobré třeba u změny hesla vyžadovat heslo staré. Útočník bude sice přihlášen, avšak bez znalosti starého hesla si účet přivlastnit nemůže.

Navíc pokud použiješ session_regenerate_id, bude to mít ještě těžší.
Radovan789
Profil *
Keeehi:
Jenže problém je vtom že dnes není těžké používat cizí IP adresu, o tom se tady na JPW již vedlo téma, a prohlížeč taky můžu mít stejný jak ta osoba včetně USER_AGENTa. Jenom to dá víc práce.
AM_
Profil
[#5] Radovan789
jak píše Keeehi, pokud session není chráněná na IP, může ji útočník převzít - ale nic to nemění na technickém faktu, že nemůže upravit její obsah (tedy např. může převzít jeho přihlášení, ale není možné do session podstrčit "prihlasen=1", zatímco do cookie ano).
Hlavně ale v programování je potřeba vědět, jak věci opravdu fungují, t.j. jak probíhá ukládání cookies, sessions, jak je možné je přečíst atd. Neměli byste si vystačit s tím, že "tohle je bezpečné a tohle někdo říkal že není, ale vůbec nerozumím tomu, proč, snad že se to dá nějak ukrást či co"..
Radovan789
Profil *
AM:
Já například k přihlášení používám cookies. A nikdy jsem stím problém neměl.
Keeehi
Profil
Radovan789:
A co všechno kontroluješ zjistí útočník jak? Když se zaměřím na kontrolu ještě dalších osmi věcí, jsem zvědavý, jak poznáš jakých. Schválně, můžeš tipovat na jakých osm dalších věcí jsem se zaměřil. Přeji příjemné věštění.
Radovan789
Profil *
Keeehi:
Rozlišení, barevná hloubka, os (+Servis Pack) a to je asi vše na co bych si tak vzpoměl. Doufám že do jednoho jsem se aspoň trefil.
Keeehi
Profil
Radovan789:
Rozlišení jsi trefil. 7 zbývá.
Ale dejme tomu, že se ti povedlo nastavit si počítač stejně jako oběť a povedlo se ti ukrást cookise s session id. Díky session_regenerate_id máš čas jenom než než návštěvník přejde na jinou stránku. Pak už ti bude na nic. Dejme tomu, že jsi to stihl. Jelikož budeš se ale budeš po webu pohybovat, budeš tím měnit session id. To způsobí, že bude návštěvník odhlášen. Co udělá? Přihlásí se. Tím je vytvořené nové session id a ty máš staré, takže budeš odhlášen. Blahopřeji, budeš muset jít krást znova. Pokud to ale bude kvůli tobě odhlašovat návštěvníka každých pět minut, bude si asi ztěžovat. Pokud bude nějaká bezpečnostní díra na webu, bude nejspíše nalezena a opravena.

Netvrdím že je toto 100% neprůstřelné a nevím, jak to s cookies řešíš ty, ale řekl bych, že toto bude v nejhorším případě stejně bezpečné jako tvůj způsob.
Radovan789
Profil *
Všechny tyto metody jsou jen o stráveném času, tak jako když ja používám přihlášení pomocí cookies, taky je možné že za pár let by na to přišli. Jenže neexistuje 100% řešení které je bezpečné. Takže jak zněla otázka tohoto tématu: co je bezpečnější? Tak o tom by se dalo polemizovat.
Keeehi
Profil
Radovan789:
V ideálním případě jsou stejně bezpečná. Obě využívají k identifikaci počítače cookies. V reálu bych viděl jako bezpečnější session, jelikož to co dělá session samo, ty musíš naprogramovat. Pokud to budeš dělat sám, 1) je s tím více práce, 2) lehce se dá na nějakou výjimku zapomenout a něco neošetřit, 3) Pokud budeš však dokonalý a uděláš to pořádně, dosáhneš pouze úrovně zabezpečení, které už session má.
AM_
Profil
Radovan789:
Já například k přihlášení používám cookies. A nikdy jsem stím problém neměl.
Já k přihlášení používám SESSION, a ty ke svému běhu vyžadují cookies. Takže bych mohl říct úplně stejnou větu jako ty :) a byla by úplně stejně nicneříkající. Jde o to, jakým způsobem ty cookies používáš - při přihlášení nastavit do cookies "prihlasen=1" je skoro úsměvné, kdežto když to uděláš v session, je to už leckdy dostatečné zabezpečení. Na to se ostatně tazatel ptal, jaký je mezi tím rozdíl. Teorie o bezpečném použití cookies k přihlašování zřejmě nebyly předmětem dotazu.
Radovan789
Profil *
AM:
Autor tématu chtěl hlavně ujasnit tyto dva pojmy, pak jsme se dobrali otom co je lepší a jednodušší. Keeehi mi ujasnil že to co umí SESSIONS si můžu i navrhnout sám pomocí COOKIES ale já používám (složitější) metodu otisku.
Tím bych tohle téma uzavřel.
AM_
Profil
Radovan789:
to co umí SESSIONS si můžu i navrhnout sám pomocí COOKIES
a tím si napsat vlastní verzi sessions, to mi připadá pochopitelné, ale nevím, k čemu je to dobré a jak se to tohoto tématu týká; vůbec to neřeší zásadní technický rozdíl mezi cookies a sessions.
Radovan789
Profil *
AM:
Zásadní technický rozdíl je vtom že to SESSIONS pouze zjednodušuje to co bych jinak mohl napsat pomocí PHP a COOKIES.
AM_
Profil
Radovan789:
tak to je spíš krásná mystifikace, SESSION je datové úložiště na serveru svázané s daným uživatelem s krátkou platností, COOKIES je datové úložiště v prohlížeči a tedy uživatelem editovatelné, ale zase s volitelnou platností (klidně i roky). Principielně jde o dvě úplně různé věci, které mají společné pouze to, že skrz krátkou cookie se zajišťuje jednoduché svázání se správnými session daty na serveru. Pokud máš (např. s nějakým asynchronním šifrováním) zajištěné přihlašování pomocí cookies bez účasti sessions nebo její obdoby na serveru, budiž ti to přáno a rád s tebou někdy popovídám o výhodách a nevýhodách daného řešení, ale zde se člověk, který zřejmě rozdíl mezi těmito technologiemi moc nechápal, ptá, která je vhodnější k přihlašování, a tak mi přijde víc na místě mu vysvětlit, jak obě dvě fungují a jaká data může uložit do cookies/sessions. Vykládat mu, že přihlašování jde bezpečně udělat přes cookies, bych v tomhle případě označil mystifikací začátečníků.
Spectator
Profil
Jsem rád, že jste mi tou debatou osvětlili docela dost. Už vím, že session jsou vlastně cookies vyšší úrovně, kde se člověk nemusí babrat se zabezpečením a vytvářet v podstatě to samé jako pomocí sessions, akorát s prací.

Je tedy pro mne, jako pro začátečníka, vhodnější používat cookies na věci netýkající se zabezpečení? Tím tedy myslím uživatelský vzhled webu a podobně?

Chápu to takto:

Cookies uloží na počítači klienta co si zamanu

Session uloží na počítači klienta id, které se následně ověřuje mezi serverem a klientem a uložím-li si do session co si zamanu, tak ale pouze na serveru.
*************

Fungují sessions všude, kde je zapnuté cookies?
Radovan789
Profil *
Spectator:

Chápu to takto:
Chápeš to dobře.

Je tedy pro mne, jako pro začátečníka, vhodnější používat cookies na věci netýkající se zabezpečení? Tím tedy myslím uživatelský vzhled webu a podobně?
Co si vybereš je na tobě. Nevidím vtom zásadní rozdíl a nezapomen že cookies jsou omezené počtem, sessions můžeš mít kolik chceš. Nemám rád weby které mi zaspamují cookies v prohlížeči nesmyslnýma hodnotama.

Fungují sessions všude, kde je zapnuté cookies?
Ano, potom je ještě musí podporovat Server.
AM_
Profil
Radovan789:
Ano, potom je ještě musí podporovat Server.
PHP podporuje sessions už od nějaké své archaické verze (a sessions v současné podobě tuším od 4.0.něco) a žádný jiný požadavek na to není. Takže stačí, aby uživatel měl zapnuté cookies (ale jak už jsem zmiňoval, i to se dá obejít, zase ale doba, kdy kdosi způsobil celosvětovou davovou psychózu s tím, že cookies nejsou bezpečné a že by si je měli lidi vypínat je pryč, dnes už je má skoro každý povolené).

Spectator:
Je tedy pro mne, jako pro začátečníka, vhodnější používat cookies na věci netýkající se zabezpečení?
Já bych řekl naopak, sessions jsou spolehlivější (jak psal Radovan789, cookies mají omezenou kapacitu - a ne že bys pak dostal nějakou hezkou chybovou hlášku o tom, že jsou plné, prostě se další neukládají a web se chová divně) a navíc je to víc v souladu s pravidly zapouzdření - nenechme uživatele hrabat do něčeho, do čeho hrabat nemá. Cookies jsou dobré kromě identifikace session k uchování trvalých informací (vzhled webu atd.) pokud není k dispozici uživatelský účet, se kterým jsou tato data spjata v databázi. Všechny informace týkající se daného sezení (nebo uživatelské nastavení, když se uživatel přihlásí) bych ukládal buď do session, nebo pokud nejsou potřeba příliš často, prostě si je v případě potřeby vždy vytáhl z DB.
Spectator
Profil
Děkuji Vám...
Dost mne to popostrčilo.
Olol
Profil *
Já bych ještě řekl k session že je určitě bezpečnější, ale pokud ho server defaultně maže po 24 minutách nečinnosti, tak je to dost nepříjemné, pokud nemáš možnost si nastavit na serveru pomocí session.gc_maxlifetime delší životnost. Ale lze to vyřešit pomocí session.save_path, tzn že si všechny session ukládáš do svého adresáře, který Ti správce nesmaže.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: