Altri punti su cui riflettere:
Un attacco con il dizionario craccherebbe la tua password. Poiché la stragrande maggioranza degli utenti ha una password non sicura, è solo questione di tempo. Usa captcha o registra voci non valide. Oppure aggiungi un po' di ritardo quando la password non è corretta.
Come ha detto il colonnello Shrapnel, un tavolo arcobaleno non è un problema per te perché vengono usati quando qualcuno ha un sacco di hash e vuole craccarli. Il sale viene utilizzato per ottenere protezione contro una tavola arcobaleno, e questo non è il tuo caso.
Se qualcuno annusa il tuo login (wifi, per esempio), sei condannato. Ci sono alcune librerie javascript che possono crittografare qualsiasi cosa usando le chiavi pubbliche. Se non vuoi usare SSL, crittografa login/password, invia al server, decrittografa usando la chiave privata e sei più sicuro.
L'uso di istruzioni preparate aiuta contro l'iniezione di SQL, poiché può essere eseguito in sicurezza anche con input dannosi:
$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();
Sul tuo modulo di accesso, ti affidi a una funzione javascript che impedisce al tasto Invio di funzionare. Cosa succede se disabilito Javascript? Puoi usare un campo nascosto (ad es. ), usare la tua funzione per impedire il tasto Invio, E usare una funzione onSubmit() per cambiare FormIsValid a 1 prima inviando il modulo. Nel tuo server, verifica FormIsValid.
La tua sessione viene salvata su un cookie, di default denominato PHPSESSID. Se un utente malintenzionato riesce a ottenere quel cookie, potrebbe inviarlo al tuo server e rubare la tua sessione. Per prevenirlo, è possibile salvare l'indirizzo IP dell'utente e lo user agent nella sessione e confrontare il valore ricevuto dalla sessione ad ogni richiesta. Se i valori non corrispondono, l'IP dell'utente potrebbe essere cambiato o la sessione potrebbe essere stata dirottata.
Come indicato sopra, se qualcuno convince il tuo amministratore ad accedere a un sito e questo sito invia una richiesta al tuo sito con un PHPSESSID sulla richiesta, il tuo sito creerà la sessione, elaborerà il login/password e dichiarerà che le credenziali sono errate . Non male fino ad ora.
Successivamente, il tuo amministratore accede al tuo portale, la sessione esiste già, l'accesso e la password corrispondono e la sessione viene AGGIORNATA. La variabile valida ora è 1.
Non appena la variabile viene aggiornata, l'attaccante ha pieno accesso al tuo portale, poiché conosce il PHPSESSID, il tuo sito non impedisce il dirottamento della sessione o la correzione della sessione.
Per evitare la fissazione della sessione e il dirottamento, vedere #5.