Autor Zpráva
Tori
Profil
Pěkný večer.

Zajímalo by mne, jak identifikujete uživatele mezi jednotlivými požadavky. Např. mám web s povinným přihlášením uživatelů, není to netbanking, ale asi tak na úrovni zapisování známek/zápočtů studentům do STAGu.

V nastavení vyžaduji povolené cookies. Pokud chce uživ.mít otevřenou stránku v různých prohlížečích, musí se v každém přihlásit (jako stejný nebo jiný uživatel, to je mi jedno).
Přihlášení - při požadavku na přihl.formulář (resp.při každém požadavku) se vygeneruje náhodné číslo (výzva) a uloží jak do session, tak do skrytého pole ve formuláři. Při zpracování formuláře se kontroluje přijatá výzva s tou v session z minulého požadavku. Pokud se neshodují, nepřihlásím uživatele ani se správnými údaji.
Pokud se výzvy shodují a přihlášení je správné (solím), uložím si do session současný čas + haš z prohlížeče a SERVER[REMOTE_ADDR] (a případně dalších IP od proxy, pokud jsou).
Při každém požadavku kouknu do session. Pokud uživ. není přihlášený, nic nedělám. Když je, tak ho nechám přihlášeného jen pokud: 1.nevypršel max.povolený čas přihlášení, 2.shodují se jeho IP a prohlížeč.

Považovali byste tohle za dostatečné, nebo ne? A co jde udělat líp? Hlavně mi jde o zabezpečení přihlášeného uživatele před ukradením jeho identity na školních/firemních sítích (=jediná vnější IP a pravděpodobně i stejné prohlížeče). Díky moc za odpovědi.
srigi
Profil
V niektorych ohladoch robis trocha zbytocnu pracu. Napr. si preposielas nahodny token cez prihlasovaci formular. V podstate sa jedna o CSRF ochranu, ale ta je v login formulari zbytocna - nikto nepotrebuje podvrhnut login formular.

Do Session ukladas veci z vonka (IPcky), ale nespomenul si ci si si ulozil aj parametre uzivatela (ID, meno, email, rola [heslo do Session neukladaj]).

Teraz uz zalezi ako mas appku navrhnutu - pises, ze kontrolujes Session pri kazdom RQ. Najjednoduchsie je sledovat pritomnost nejakeho kluca v Session, napr. toho user ID. Ak kluc neexistuje alebo to nie je integer, tak user proste nie je prihlaseny, je vhodne ho presmerovat na homepage alebo prihlasovaci formular (ako potrebujes).

Ak ta premenna pritomna je, urobis dalsie checky: cas, IP. Vzdy ked usudis, ze nieco nesedi, zavolaj funkcie na zmazanie session:
$_SESSION = array();
session_destroy();

a opat presmeruj na homepage/login.

Takto je to dostatocne, v podstate viac bezpecnosti sa da do toho dopisat vseliakymi trikmi so session_regenerate_id() po prihlasenii, pouzivanim druhej cookie na dlhodobe prihlasenie a pod. Ale v takom momente je uz vhodnejsie pouzit framework a nevymyslat znovu koleso.
Alphard
Profil
Tori:
Po přihlášení session_regenerate_id().
Ke kontrole IP jsem spíš skeptický, bude uživatele odhlašovat při mobilním netu a v jedné síti, kde lze přes wifi očekávat odposlech, nepomůže.
Takže jestli je bezpečnost fakt důležitá, zapoj https. Přečti si Ukradli jsme účet k Facebooku. S Androidem za pět sekund, bez šifrování nemáš šanci.
O CSRF předpokládám nemusím mluvit, občas změň identifikátory.
Jan Tvrdík
Profil
Tori:
shodují se jeho IP a prohlížeč.
To je bohužel trochu problém, protože IP adresa se může mezi požadavky měnit a to nejen u mobilního internetu. Dokonce ani na neměnnost user agent se nelze zcela spolehnout, vlivem různých rozšíření apod. se také mezi požadavky může lišit.

Doporučuji si přečíst sérii článků o sessions od Honzy Tichého.
Tori
Profil
Děkuju moc za rady, články si přečtu a snad už to konečně pochopím.

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: