Véleményt a beléptető felületemre
Sziasztok hétfőre le kell adjak egy házi feladatot feladatom!
Tehát én meg is csináltam,de tanácsot kérnék hogy mit kéne változtatni,hogy megkapjam a 100%ot rá?
Szerintem eléggé pofás lett :) de valamit még változtatni akarok,de nem tudom mit :) esetleg ti?
Kritikák érdekelnek a legjobban!
Utólag szerk:
Oldal
■ Hoz létre egy beléptető formot és a legújabb technikával formázd meg!+jquery egyéni ötletekkel,php adatbázis nélküli belépéssel='csak hibák kezelése'
Tehát én meg is csináltam,de tanácsot kérnék hogy mit kéne változtatni,hogy megkapjam a 100%ot rá?
Szerintem eléggé pofás lett :) de valamit még változtatni akarok,de nem tudom mit :) esetleg ti?
Kritikák érdekelnek a legjobban!
Utólag szerk:
Oldal
Username && Password
Password:admin
Esetleg valami link ahol
Elnézést
Én esetleg azon módosítanék
Értem!
Üdv! Én szerintem annyival
Én szerintem annyival tudsz még hozzá tenni, hogy az alap lorem ipsum szöveg szerintem legyen nagyobb. Illetve a dobozon belüli két mező nincs teljesen középen vagy nem látszik hogy pont középen lenne. Még annyi talán, hogy nekem úgy lenne logikus hogy mikor kiúszik a kis ikon, hogy user-pw akkor a pw-s ikon inkább jobb oldalt ússzon kifelé.
Megtörtént
Hiba
Szerintetek?
tippek tanácsok
Tehát megírom a belépést adatbázis alapúra,de addig nem akarom elkezdeni amíg nem tudok biztonságos lekérdezést készíteni.
Tippek
- A legalapvetőbb dolgok megvannak, de:
- Ha md5-öt (v. sha1-et) használsz hash-elésre, akkor a jelszón kb. felesleges a
mysql_real_escape_string
, mert a hash mindkét fv esetén egy hexadecimális szám lesz, tehát nincs benne semmilyen idézőjel, stb.- md5 helyett az sha1 annyiból jobb, hogy hosszabb (40 karakter) stringet ad vissza, így munkásabb a "kitalálása".
- Mindenképpen érdemes az eltárolt, hash-elt kódot még a hash előtt "sózni". (Belekeversz a titkosítandó jelszó karakterei közé más karaktereket is, saját szabályod szerint, fantáziálj!) Így majdnem lehetetlen visszafejteni.
- Ha valahol ki is írod majd a felhasználónevet (vagy más Júzer-adatot), akkor azt majd még szűrni kell XSS, CSRF, stb. ellen. Ezt kiírás előtt szokás, de felhasználóknál megteheted már a regeléskor, és a szűrt adatot szúrod a táblába. (Így csak egyszer kell szűrni.) Ez más, "ismeretlen" Júzertől jövő adatra is érvényes.
- Azt nem tudom, hogy mi van az adattábla első oszlopában, de valószínűleg id. Akkor az
if($row[0] > 0)
feltételnek nem sok értelme van. Én szoktam használni egy "státusz" (tinyint(4)) mezőt is, ami pl. ha >1, akkor aktív a Júzer. Ha 0, akkor regelt, de még nem engedélyezett, ha -1, akkor letiltott, ha -2, akkor törölt, etc. Sok egyébre is lehet ezt használni, beléptetéskorWHERE `statusz` > '1'
formában szoktamellenőrizni.
- Arra nézve, hogy sikeres-e a belépés, jobb megoldás a visszakapott eredmény számának az ellenőrzése (
mysql_num_rows($res) === 1
), így mégegy védelmed van esetleges injection ellen. Ha OK (=== 1), akkor vedd ki tömbbe a sort, ...- Sütikezelés. Ha ez azt a célt szolgálja, hogy "maradjon bejelentkezve", akkor az én (biztonsági) elveimmel ellenkezik. Elég annyi is, hogy a látogatók többsége nem is tudja mi ez, eszébe sem jut, hogy ha számára idegen gépről logol, akkor jelentkezzen ki a végén... Továbbá nagyon nehéz azt elérni, hogy a süti ellopásával (kémprogik) ne lehessen máshonnét u.azt felhasználni. Én az expires_on_close híve vagyok, - mondjuk a böngészőt is ott lehet felejteni nyitva.
Szerk.: ja, ezeket itteni cikkekben is olvashatod, nézz körül, mert ez bővebb téma!
- md5 helyett az sha1
Teljesen mindegy, az md5 is bőven elég hosszú ahhoz, hogy lehetetlen legyen kitalálni. Más jellegű probléma van mindkettővel (túl gyorsan számolhatók).
- ne használj mysql-t,
- ne kézzel escapelj, használj paraméteres lekérdezéseket. Egyrészt tömörebb és áttekinthetőbb kódot eredményez, másrészt nehezebb hibázni, harmadrészt nem kell amiatt aggódnod, hogy esetleg rosszul adod meg a karakterkódolást, és az escape ellenére is sebezhető vagy.
- && helyett az AND olvashatóbb is, hordozhatóbb is (standard SQL, az && viszont MySQL-specifikus).
- ahogy már elhangzott, hasheld a jelszavaidat. PHP 5.5-től lesz majd beépitett nyelvi támogatás, addig ezt a könyvtárat be kell includolni hozzá. Regisztrációnál bekéred a jelszót, és
password_hash($jelszo, PASSWORD_BCRYPT)
eredményét (jelszó hash) mented el az adatbázisba, ellenőrzésnél bekéred a jelszót, kiolvasod a hash-t az adatbázisból, éspassword_verify($jelszo, $hash)
megmondja, helyes volt-e a jelszó.- általában nem illik egy SELECT * eredményére számmal hivatkozni. Részben nehezen olvasható kódot eredményez, részben ha valamiért megváltozik az oszlopok sorrendje az adatbázisban (mentésből visszaálltás pl.), akkor borul az egész. Használd a *_fetch_assoc függvényeket, és akkor
$row['id']
és hasonló alakban tudsz hivatkozni a mezőkre.- komoly bejelentkező oldalra throttling is kell, azaz megakadályozni, hogy a támadó szisztematikusan végigpróbálgassa a jelszavakat.
- a hibaüzenetben érdemes jelezni valahogy, hogy a jelszó volt rossz, vagy nincs is ilyen user.