ugrás a tartalomhoz

Login rendszer készítése

rockybro · 2009. Már. 22. (V), 13.57
Hali!

Automatikus bejelentkezéses login rendszert szeretnék készíteni.
Odáig már eljutottam, hogy automatikus bejelentkezés nélkül jól működik: van egy formom, beírom a username-et és a passwordot, utána a passwordot kódolom md5-tel, majd összehasonlítom a felhasználó által megadott adatokat az adatbázisban lévőkkel. ha minden stimmel, indítok egy sessiont és a session_id-t hozzárendelem az adatbázisban a userhez. ezután szépen minden oldal elején folytatom a session-t és az adatbázisban rákeresek az aktuális session_id-re. ha megtalálom az egyező id-t mondjuk rockybro usernél, akkor rockybrot beléptetem.

és most jön az automatikus bejelentkezés. ahhoz már nem elég sessiont használni, mert ugyebár a session_id már más lesz, amikor újraindítom a böngészőt. ekkor jöhetnek szóba a sütik. megcsináltam úgy, hogy cookieba beraktam a felhasználónevet, és a kódolt jelszót, így is jól működött. de úgy tudom, hogy nem nagyon szabadna cookieba pakolni a jelszót, mégha kódolva van, akkor sem. hogy lehet ezt megoldani biztonságosan?
 
1

session_id

Poetro · 2009. Már. 22. (V), 14.15
A session_id-t rakod cookie-ba, és azt hasonlítod össze az adatbázisban tárolt session azonosítóval. Azaz amikor a felhasználó belép, letárolod adatbázisban a felhasználói név / session_id párost, és a session_id-t átadod cookie-ban. Amikor meg jön a felhasználó session_id nélkül, akkor megnézed, van-e neki cookie-ban session_id, ha van, akkor megnézed, érvényes-e, ha érvényes, akkor ezzel belépteted. Amikor persze a felhasználó kilép, akkor törlöd az adatbázisból, és a cookie-ból is a session_id-t.
2

update?

rockybro · 2009. Már. 22. (V), 16.12
ugye ezt úgy gondoltad, hogy amikor a felhasználó aktuális session_id-je nem, de a cookieban lévő id megegyezik az adatbázisban lévővel (ez akkor következik be, ha újraindítja a böngészőt), akkor belépteted a felhasználót, de már frissíted az aktuális id-vel a cookiet és az adatbázist? mert ha ezt nem teszed meg, akkor akár 1 évig is ugyanaz lesz a tárolt session_id-je (ha egy évig nem lép ki), és ez nem túl biztonságos... kell még valahogyan "biztonságosítani", vagy így is elég biztonságos?
5

igaz

Poetro · 2009. Már. 22. (V), 18.52
Teljesen igaz, a sikeres beléptetés esetén generálni kell egy új session_id-t, ezt lementeni adatbázisba, és elküldeni a felhasználónak az új cookie-t.
3

Süti lejár

Zmetser · 2009. Már. 22. (V), 17.16
Amikor létrehozod a sütit megmondod neki, hogy mennyi idő után járjon le és ha lejárt törlöd az adatbázisból a session_id-t és újat adsz.
4

én úgy gondoltam, hogy

rockybro · 2009. Már. 22. (V), 18.17
én úgy gondoltam, hogy mondjuk két hét lejárati időt adok a cookienak, de ha bejelentkezel, akkor meghosszabbítom a bejelentkezéstől számított két hétre.

de én mindezt úgy gondoltam, hogy ha az aktuális session_id(tehát amit épp most generált a php) nem, de a cookieban tárolt id megegyezik az adatbázisban tárolt id-vel(ez a jelenség akkor következik be, ha újraindítjuk a böngészőt), akkor beléptetem a usert, de közben szépen a frissen generált id-vel frissítem a cookiet és az adatbázist. így minden bejelentkezésnél megújul a tárolt session_id, és szerintem nehezebb így ellopni. hogy tetszik az ötlet? hogyan csinálják a profik?
7

vagy sózd meg

numen · 2009. Már. 22. (V), 20.28
szerintem az is egy megoldás, ha minden sessionnél eltárolsz kukiba egy saltot, meg a szerveren is.
a $pwd . $salt stringnek a hashét már nyugodtan eltárolhatod bárhol, főleg ha alaposan elsózod;)
8

Kicsit off

fchris82 · 2009. Már. 23. (H), 03.30
Elnézve a kérdéseidet, felmerült bennem, hogy: nem szeretnél inkább beszerezni néhány könyvet, azt elolvasni és utána belekezdeni a fejlesztésbe? :) Egyáltalán nem bántás képen, csak magad is talán gyorsabban haladnál és hosszútávon "biztosabb" alapokra építkeznél, mint így ad hoc belekezdve.
9

alapok

SamY · 2009. Már. 23. (H), 08.04
Én már az alapjainál nem értem miért a session_id -t tárolod le és keresel rá minden oldalletöltésnél. (kis site-nál mind1, de 500.000 usernél főleg ha pl. ha sűrűn növekszik a létszám már felesleges terhelés és +1 index és még úgy is lassabb lekérdezés)

Én így csinálnám (login, session):
- user elküldi a login adatait (username/password)
- php oldalon lekérdezed a user -t, ellenőrzöd a jelszót
- ha minden oké, session -be bepakolod az a komplett rekordot a userről

Így már nem szükséges minden oldalbetöltéskor lekérdezned sessionid alapján a user -t az adatbázisból, csak loginkor.

A többi már nagyon hasonló a te módszeredhez:
Automatikus beléptetés:
- user belép
- generálsz egy hash -t (pl. md5(user_email + user_id + user_agent)), melyet letárolsz a usernél
- következő olyan kérésnél mikor nincs session de van cookie -ból érkező hash, kikeresed a hash alapján, és ellenőrzöd a hash -t (db -ből érkező user_email + user_id + kérésben érkező user_agent)
- ha minden oké, a user rekordját - ugyanúgy mint login-nál - letárolod a session -be.

Az automatikus beléptetés kb. ugyanaz mint nálad a login, viszont némi erőforrást megspórolsz vele.

u.i.: egy hasonló thread, hátha segít. Illetve érdemes olvasgatni a session lopásról/sql injection -ről kicsit részletesebben.
13

Ez azért

inf · 2010. Aug. 5. (Cs), 06.08
Ez azért erős...

md5(user_email + user_id + user_agent))
Aztán jön valaki, kikeresi szivárványtáblán a saját cookie-jára, hogy miről van szó. Ha megtudja a támadott account user_id-jét meg email címét (pl: sql injection), akkor már bent is van.

szerk:
Saltolva viszont jó lehet, szivárvány tábla csak rövid stringek törésére alkalmas.
10

Sima

spider666 · 2010. Júl. 31. (Szo), 11.43
Sima jelszavas védelmet itt találsz!
11

Védelem?

Schmidi · 2010. Júl. 31. (Szo), 12.41
És mi történik, ha az általad linkelt példában én a következő URL-t írom a böngészőbe?

http://pelda.domain/belepett.html
12

Generálsz cookie-ba egy jó

inf · 2010. Aug. 2. (H), 00.17
Generálsz cookie-ba egy jó hosszú azonosítót, amit egy külön táblában tárolsz. Az azonosító mellé beteszed az user_id-t, aztán megnézed, hogy a cookie-ban tárolt string megvan e a tábládban, ha igen, akkor automatikusan belépteted.
Nagyon kicsi az esély arra, hogy törlöd a cookie-ba generált id-t a táblából, aztán utána kiosztod másnak, de azért ennek elkerülésére érdemes az user_id-t is hosszáfűzni valahogy a cookie-ban lévő azonosítóhoz...