Autor Zpráva
Dusan
Profil *
Dajme tomu ze mam klasicku autentizaciu uzivatela cez session, ktore pouziva defaultny save handler (session subory ktore PHP interne vytvara na serveri).

Na restricted stranke mam klasicky logout button, ktory korektne riesi odstranenie session - vycistenie $_SESSION, odstranenie session suboru a invalidacia cookie.

Problem nastane, ak sa uzivatel odloguje inym sposobom - napr. vycisti si cookies manualne, alebo vymaze historiu browsera. V tomto pripade sa teda kod pre odstranenie session nevykona a pri dalsom nacitani stranky je uzivatel presmerovany na login. Uzivatel ma pocit ze je odhlaseny, v skutocnosi ale session subor s poslednym ID na serveri existuje. Ak teda podsuniem browseru cookie s povodnym ID, ziskam opatovny pristup do poslednej session. Jasne, je mozne kontrolovat na serveri idle time tohto ID a po vyprsani session subor na serveri vymazat, ale ako to urobit este predtym nez cas neaktivity vyprsi ?

Ide mi proste o tu slepu dobu - uzivatel sa nekorektne odloguje => session subor ostava na serveri (session je teda mozne obnovit) => session subor sa vymaze az po urcitom idle case => teraz uz session nie je mozne obnovit podstrcenim posledneho ID.
Alphard
Profil
Dusan:
vycistenie $_SESSION, odstranenie session suboru a invalidacia cookie
Jestli to vše děláte ručně, je to dost paranoidní. V session stačí nastavit stav jako odhlášen (resp. nepříhlášen), neničte všechen zbytek, mohou ho (někdy) využívat jiné části webu.

Obecně neexistuje řešení, jak odlišit neodhlášeného uživatele a uživatele, který si třeba jen čte stránku, nastavte rozumnou expiraci. Pro webové bankovnictví to může být 10 minut, PHP defaultní je 24 minut, já na nekritických webech nechávám i několik hodin. Určitou pomůckou může být třeba js script na pozadí, který posílá ping, dokud je stránka aktivní, nebo se snaží odchytit události při uzavření stránky; ale neviděl jsem, že by se to často používalo.

Spíš se zabývejte tím, jak by někdo ukradl cookie. Jestli nepoužíváte ssl a data nešifrovaně putují po síti, lze vidět nejen cookies, ale i přihlašovací údaje, takže tam by v případě kritické aplikace bylo v první řadě vhodné zapracovat na šifrování.
Dusan
Profil *
Alphard:
Spíš se zabývejte tím, jak by někdo ukradl cookie. Jestli nepoužíváte ssl a data nešifrovaně putují po síti, lze vidět nejen cookies, ale i přihlašovací údaje, takže tam by v případě kritické aplikace bylo v první řadě vhodné zapracovat na šifrování.

No ale pokial cookie dorazi do browsera, tak tam nie je nijak chranene, alebo ano ?

Ak sa proste cookie nejakym sposobom odchyti z browsera, je mozne pouzit ID (v dobe pred expiraciou) a obnovit session aj ked ma uzivatel pocit ze sa odhlasil vymazanim historie(cookies).
Alphard
Profil
Když uživatel vymaže historii, už se do prohlížeče původní session identifikátor nedostane. Vaše scénáře cílí zřejmě na veřejné pracovní stanice (internetové kavárny, knihovny, školní laboratoře, ...), tady je bezpečnost vždy problém a jestli jsou uživatelé neopatrní, nic moc se s tím nedá dělat.

Prohlížeč samotný cookies nijak nechrání, jako uživatel počítače si mohu zobrazit libovolné aktuální cookie.
Dusan
Profil *
Alphard:
Když uživatel vymaže historii, už se do prohlížeče původní session identifikátor nedostane

To je jasne, ale ja to pisem v tej suvislosti zneuzitia cookies.

Rozmyslam nad tym najma z hladiska UX.

Niektori uzivatelia mozu byt zvyknuti namiesto stlacenia logout na stranke vymazat historiu browsera:

Uzivatel po skonceni prace na webe vymaze historiu, refreshne stranku a vidi ze ho to presmerovalo na prihlasovaciu stranku.
V domnienke ze je odhlaseny, odide z PC.
V skutocnosti odhlaseny ale nie je, pretoze odoslanim cookie s povodnym ID (ktore sa priamo z browsera nejakym sposobom odchytilo) je mozne obnovit session celu dobu predtym nez vyprsi timeout kontrolovane na serveri a podla ktoreho sa maze session subor.

Asi nie je ina cesta nez to, aby Logout button bol jasny, viditelny, pristupny a hlavne, oboznamit uzivatelov s tym, ze jedina bezpecna cesta pre odhlasenie je iba cez toto tlacitko.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0