Andre ting at tænke over:
1. Du er sårbar over for bruteforce
Et ordbogsangreb ville knække din adgangskode. Da langt de fleste brugere har en usikker adgangskode, er det kun et spørgsmål om tid. Brug captcha, eller log ugyldige poster. Eller tilføj en forsinkelse, når adgangskoden er forkert.
Som oberst Shrapnel sagde, er et regnbuebord ikke et problem for dig, fordi det bruges, når nogen har en masse hash og ønsker at knække dem. Salt bruges til at opnå en vis beskyttelse mod et regnbuebord, og dette er ikke dit tilfælde.
2. Du sender adgangskoder i klartekst
Hvis nogen snuser til dit login (f.eks. wifi), er du dømt. Der er nogle javascript-libs, som kan kryptere alt ved hjælp af offentlige nøgler. Hvis du ikke vil bruge SSL, skal du kryptere login/adgangskode, sende til server, dekryptere med den private nøgle, og du er mere sikker.
3. Overvej at bruge forberedte udsagn på MySQL
Brug af forberedte sætninger hjælper mod SQL-injektion, da det sikkert kan køre selv med ondsindet input:
$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();
4. Fortæl ikke validering på klientsiden
På din login-formular videresender du en javascript-funktion, der forhindrer Enter-tasten i at fungere. Hvad hvis jeg deaktiverer Javascript? Du kan bruge et skjult felt (f.eks. ), bruge din funktion til at forhindre Enter-tasten OG bruge en onSubmit()-funktion til at ændre FormIsValid til 1 før afsendelse af formularen. Bekræft FormIsValid på din server.
5. Du er sårbar over for sessionskapring
Din session gemmes på en cookie, som standard kaldet PHPSESSID. Hvis en angriber kan få den cookie, kan den sende den til din server og stjæle din session. For at forhindre det, kan du gemme brugerens IP-adresse og brugeragent i sessionen og sammenligne værdien modtaget fra sessionen ved hver anmodning. Hvis værdierne ikke stemmer overens, kan brugerens IP være ændret, eller sessionen kan være blevet kapret.
6. Du kan være sårbar over for sessionsfiksering
Som nævnt ovenfor, hvis nogen overbeviser din administrator om at få adgang til et websted, og dette websted sender en anmodning til dit websted med et PHPSESSID på anmodningen, vil dit websted oprette sessionen, behandle login/adgangskode og angive, at legitimationsoplysningerne er forkerte . Ikke dårligt indtil nu.
Senere logger din administrator på din portal, sessionen eksisterer allerede, login og adgangskode matcher, og sessionen er OPDATERET. Variablen gyldig nu er 1.
Så snart variablen er opdateret, har angriberen fuld adgang til din portal, da han kender PHPSESSID, forhindrer dit websted ikke sessionkapring eller sessionsfiksering.
For at undgå sessionsfiksering og kapring, se #5.