Odhlášení cizího uživatele
- Andrasin
- Člen | 29
Ahoj, řeším teď následující věc. Poměrně jednoduchý cms s frontendem a adminem, v adminovi je možnost ve správě uživatelů každého uživatele smazat, zabanovat atd.
Jde mi o to, že pokud bude uživatel zrovna přihlášen a někdo mu v adminovu udělí např. ban, chtěl bych ho odhlásit, protože dokud by se neodhlásil, mohl by se v systému dále pohybovat. Je nějaká možnost jak můžu identifikovat jeho session a zrušit ji?
- Aurielle
- Člen | 1281
Specifikujme dotaz trochu jinak. Dejme tomu, že máme nějaký ACL systém a administrátor může uživatelům libovolně měnit jejich práva (pro zjednodušení roli). V momentě, kdy je uživatel přihlášen, jeho údaje jsou uloženy v identitě a admin mu změní roli, do odhlášení mu zůstávají stará práva. Jak řešit tohle? Načítat při každém requestu znovu uživatelovy údaje a porovnávat, jestli se nezměnily s identitou, mi nepřijde jako příliš vhodné řešení.
- Panda
- Člen | 569
MartyIX napsal(a):
Idea: http://stackoverflow.com/…ssion-in-php
Disclaimer: Nezkousel jsem to.
Metodu uvedenou v „nejlepší odpovědi“ v žádném případě
nepoužívat! Pointa SESSION ID je, že je unikátní a
nepředvídatelné. Pokud bych generoval session ID MD5kou z uživatelského
jména, tak jediné co mi stačí na přihlášení na jiného uživatele je
znát jeho uživatelského jména. A jistě nechcete dávat super práva
každému, kdo umí zavolat md5('admin')
.
Nepomůže ani solení nebo jiné techniky, pak se totiž jen situace převede na session hijacking, při kterém identifikátor session zůstává stejný, což znamená že ukradení účtu je trvalé.
Osobně bych doporučil jako session storage používat databázi, ukládat si do ní i název uživatele a v případě modifikace uživatele označit všechny jeho sessions k reloadu oprávnění, při smazání session smazat.
- MartyIX
- Člen | 217
Panda napsal(a):
MartyIX napsal(a):
Idea: http://stackoverflow.com/…ssion-in-php
Disclaimer: Nezkousel jsem to.
Metodu uvedenou v „nejlepší odpovědi“ v žádném případě nepoužívat! Pointa SESSION ID je, že je unikátní a nepředvídatelné. Pokud bych generoval session ID MD5kou z uživatelského jména, tak jediné co mi stačí na přihlášení na jiného uživatele je znát jeho uživatelského jména. A jistě nechcete dávat super práva každému, kdo umí zavolat
md5('admin')
.Nepomůže ani solení nebo jiné techniky, pak se totiž jen situace převede na session hijacking, při kterém identifikátor session zůstává stejný, což znamená že ukradení účtu je trvalé.
Co uložit pokazde unikatni identifikator uzivatelovy session do DB po prihlaseni?
- besir
- Člen | 170
Andrasin napsal(a):
ano tak nakonec jsem to vyřešil tak, že po přihlášení uživatele se uloží jeho session id do databáze a například po udělení banu kontroluji, jestli session s id, které je v databáti existuje, pokud ano, smažu ji.
Sic trochu s křížkem po funuse, ale nebylo by lepší se prostě předpokládaný sessionID pokusit smazat a ověřovat zda se povedlo (eventuelně počet ovlivněných řádků) a až potom řešit neúspěch, než jí kontrolovat jestli je a v případě existence jí smazat…
- Badaboom
- Člen | 33
Teoreticky
Do storage si uložím čas, kdy se mají obnovit role, do session pak čas aktualizace role. Při každém požadavku zkontroluji, jestli se mají role obnovit.
Při změně práv by se pochopitelně uložil čas změny.
Nevýhody
+1 dotaz na storage
Byla by třeba aktivita uživatele ?
Otravování
více uživatelů :
Výhoda++
Teorie
Výhody
Dotaz můžu spojit např. s načítáním nastavení
Cachování jediné hodnoty