Gondolom mindenki számára ismerős az automatikus beléptetés funkció: a regisztrált felhasználók belépéskor bepipálhatnak egy checkbox-ot jegyezz meg, emlékezz rám vagy valami hasonló felirattal, aminek eredménye az lesz, hogy a következő látogatáskor nem kell újra beírni a felhasználónév/jelszó párost, az oldal azonnal felismeri őket.
Feladat
Egy PHP webprogramozó szemszögéből elsőre egyszerűnek tűnik a feladat: ki kell állítani egy sütit, ami nem jár le az ablak bezárásakor, azaz nem session süti, és tartalmaz egy véletlen kódot. Adatbázisban pedig elmentjük a véletlen kódot és a hozzá tartozó felhasználót. Ha egy ismeretlen (nem belépett) látogató küld egy ilyen sütit és a véletlen kódot megtaláljuk az adatbázisban, akkor azonnal beléptetjük, nem kérjük tőle a jelszavát.
Egyszerű, pár perc alatt leprogramozható funkció, igaz? Nos a helyzet nem ilyen egyszerű.
Biztonság
Ez a fajta beléptetés jónéhány biztonsági kockázatot rejt magában, amelyeket ki kell küszöbölni, ahhoz hogy nyugodt szívvel használhassuk ezt a fajta beléptető rendszert.
Először is egy felhasználóhoz több ilyen emlékező süti tartozhat. Belép a munkahelyén, otthon az asztali gépén, notebookján, stb… De ennek érdemes egy határt szabni, nem szerencsés, ha minden határon túl nőhet az egy felhasználóhoz tartozó beléptető sütik száma.
Egy ennél is fontosabb tényező, hogy érdemes megkülönböztetni egy hagyományos belépést, ahol megtörténik a felhasználónév/jelszó páros beírása, és egy ilyen megjegyzéssel történt belépést. A kettő nem azonos erejű. Jobban meg lehet bízni abban a munkamenetben (session) amikor a felhasználó ténylegesen beírta a jelszavát. Miért? Az emberek néha leülnek egymás számítógépéhez, és közösen használják. Ha a mi gépünkhöz ülnek le és nem nézünk oda, mindössze néhány másodperc is elegendő ahhoz, hogy egy népszerű oldalon súlyos károkat okozzanak nekünk. Például:
- Megváltoztathatja jelszavunkat, ezzel ellopja a regisztrált profilunkat
- Törölheti regisztrációnkat, ez a lépés általában visszaállíthatatlan.
- Egy közösségi oldalon, pl. IWIW, küldhet üzenetet akár az összes ismerősünknek a mi nevünkben. A barátainknak pedig semmi okuk nem lesz kételkedni abban, hogy mi küldtük az üzenetet.
Drupal megoldás: a Persistent Login modul
A fentiekből jól látszik, hogy több részletkérdésre is figyelni kell, de a Persistent Login modul igazán jó munkát végez ezen a téren:
- Üdvözlő üzenetet tud megjeleníteni, ha a belépés egy emlékező sütivel történt.
- Belépés után kiírja a felhasználónak, hogy hány különböző ilyen emlékeztető sütit állítottak már ki neki, és lehetősége van törölni ezeket.
- Tiltani lehet bizonyos funkciókat az oldalon, amelyeket a felhasználó csakis akkor érhet el ha ténylegesen beírja a jelszavát. Például a jelszó változtatás vagy webáruházban egy rendelés tényleges feladását érdemes beállítani ilyen kiemelt bizonságú funkciónak. Érdekesség, hogy a drupal-ban egy felhasználónak jelenleg nincs lehetősége saját account-jának törlésére. Ez egyébként a Drupal egyik legrégebbi issue-ja: http://drupal.org/node/8 !
Én személy szerint nagyon elégedett vagyok ezzel a modullal, minden projektben ez az első modul amit feltelepítek! Ha másért nem, már csak azért is, mert fejlesztés közben nem kell folyton beirogatni a root jelszót. Természetesen az EdgarPE.hu-n is telepítve van :)
Link: http://drupal.org/project/persistent_login