Biztonságos login rendszer?
Nem is olyan rég elkészítettem első működő login rendszerem <kezdő vagyok>, amely abból állt, hogy regisztrálás után bekerült adatbázisba a felhasználónév, a hashelt jelszó illetve a többi cucc. Ha ez megvolt, akkor jöhet a belépés.
A belépés annyiból áll, hogy felhasználónév, jelszó, és bejelentkezés. Amint ezeket bekértem, megnézem adatbázisban minden stimmel-e, aztán itt jön a bajos része, mert valahogy meg is kellene tartanom ezt az állapotot. Csináltam egy cookie-t, és mindig azt vizsgálgatom belépéskor. Nem értek még ehhez, töltöttem már le működő rendszereket, de a kódjukat nem láttam át, nem tudtam átalakítani, hogy átlássam, nem értettem belőle semmit, ezért mindenképp marad a saját rendszerem. Nem nagy forgalmú weboldalt szeretnék, mivel van egy játékszerverem, és annak csinálok weblapot, ill. login rendszert, hogy el tudjam tárolni az adatokat a játékosokról, és azt monitorozni tudjam, magamnak.
Tehát mit ajánlotok, hogyan is álljak neki ennek a rendszernek a kivitelezésével, mivel kezdjek ismerkedni, stb?
"Csináltam egy cookie-t, és mindig azt vizsgálgatom belépéskor."
Valószínűnek tartom, hogy itt hibáztál óriásit. (Bár nem tudom a konkrét kódot...)
Használj munkamenetet (session), ahogy azt kell.
A másik irdatlan gyakori hiba magánál az SQL lekéréseknél van, hogy nem megfelelően védik őket. Remélem mysqli-t vagy PDO-t használsz, prepared statementekkel. Ez a legbiztosabb megoldás.
az se tudom, hogy mi az amit leírtál.
lekérdezésem:
$sql = mysql_query("SELECT valami FROM valami");
while ($row = mysql_fetch_array($sql))
{
//ide meg a cucc
}
insert:
$sql = "INSERT INTO valami blablabla..";
mysql_query($sql);
Jó, ezt most töröld ki, és kezdd újra az egészet, ezekre gondolva.
1.)Ne engedj speciális karakter (ctype_alnum())! Ez kb. a problémák felét rögtön megoldja. Ha szeretnél, kezd egy prepared statementeket használni, vagy legalább mysqi_real_escape()-et [kulcsszó: sql-injection].
2.)Hosszúságszabályozás.
3.)Mindig olyan forrást használj, aminek az adatai a szerven vannak, te szabályozod őket, és a felhasználónak nincs közvetlen útja hozzá, mert nem képes végrehajtani a vele kapcsolatos műveleteket, vagy ha ezt teszi, elcseszi a bejelentkezést.
Pl. amiket én használok: session. Alapból cookieban van tárolva az elérési kódja, ami lejár bezáráskor, tehát ha el is lopják, sem tudnak vele különösebben kezdeni valamit.
Cookie: semmire sem jó, csak olyanra, ami a felhasználó érdeke, hogy működjön. Pl. olyan infók átadása, mint hogy melyik oldaladról jön, hogy pl. bejelentkezés után a top.location újratöltődjön-e vagy sem.
IP: hasznos lehet, de mindkettő ellenőrzése szükséges. Bár egy jó proxyt nem lehet kiszűrni, ez csak másodlagos védelem.
Időzár. 12 óra után pá, kidob. Ne feltételen jó, én csak offlineban dobálok ki embereket.
Mysql-használat. Csatold egy session_id-hez, és ellenőriztesd onnan is. Így ha ellopják a session_id-t sem tud bejelentkezni, mert más ip-vel van beregelve.
4.)MD5()
5.)Amiben igazad van: mindig sajátban bízz csak meg.
"4.)MD5()"
Mára már nem!
Minimum sha1, de még inkább bcrypt.
Azért még jó az falura némi sóval.
(de való igaz, semmiből nem tart shat használni)
Különösen a 3. válaszát köszönöm!
Közben az injektálásra már rátaláltam.
Neki is állok átpasztázni mit tudok tenni. :)
Köszönöm a válaszokat! :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!