ciao a tutti,
ho elaborato uno script per il login, sembra funzionare alla perfezione; ma volevo chiedervi se ci sono errori di sicurezza:
- I dati di accesso dal form vengo trasferiti con POST
- faccio un controllo sull'ip dell'utente; se non ha tentato di accedere per più tre tre volte sbagliando, negli ultimi 15 min, passo al controllo successivo, altrimenti viene caricata una pagina di errore
- faccio un controllo sui dati ottenuti via POST e mi assicuro che siano solo numeri e lettere e compresi tra 4 e 12 caratteri, poi passo al successivo controllo, altrimenti viene caricata una pagina di errore
- controllo che i dati abbiamo una corrispondenza nel mio database, se tutto ok setto un cookie e registro i dati in una tabella dedicata agli accessi avvenuti con successo, altrimenti errore
- se uno dei controlli non è soddisfatto viene registrato un tentato accesso in una tabella apposita
spero di essere stato abbastanza chiaro!
fatemi sapere se il sistema è valido e spero che magari possa essere utile a qualcun'altro.
FAB
Codice PHP:
<?
include "parametri.php";
$username = $_POST['username'];
$password = $_POST['password'];
$loc = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if ($_SERVER['REMOTE_ADDR'] == ""){ $ip = "no ip"; }
else { $ip = $_SERVER['REMOTE_ADDR']; }
$pc = $_SERVER['HTTP_USER_AGENT'];
$time = time();
$queryCK = mysql_query("SELECT * FROM IP_LOGIN WHERE IP = '" . $ip . "' and '" . $time . "' - TIME < 900");
$numberCK = mysql_num_rows($queryCK);
if ($numberCK < 4){
/** controlla che nel nome utente e nella password ci siano solo lettere e numeri e che siano composti da 4 a 12 caratteri **/
if (preg_match("/^[a-z0-9]{4,12}$/i", $username) and preg_match("/^[a-z0-9]{4,12}$/i", $password)) {
/** query di accessi ai dati nel DB **/
$query2 = mysql_query("SELECT * FROM members where username= '" . $username . "' and pw = '" . $password . "'");
/** calcolo delle righe trovate; se uguale a uno esegue la verifica **/
$num = mysql_num_rows($query2);
if ($num == '1'){
while($row = mysql_fetch_array($query)){
/** verifica per l'accesso all'area riservata **/
if ($user == $row[utente] && $pass == $row[pw] && $row[listino] == 'tutti'){
setcookie("Cookie", md5($row[nominativo]), time()+7000);
include "pagina-segreta.php";
/** registra l'accesso **/
$querySALVA = "INSERT INTO contatore (user, nominativo, loc, ip, pc) VALUES ('$row[username]', '$row[nominativo]', '$loc', '$ip', '$pc')";
$salvaSALVA = mysql_query($querySALVA, $db)
or die("Errore " . mysql_error());
}
}
if ($number == '0'){
$queryIP = mysql_query("INSERT INTO IP_LOGIN (IP, username, pw, TIME) VALUES ('$ip', '$username', '$password', '$time')");
include "error.php";
}
}
else {
$queryIP = mysql_query("INSERT INTO IP_LOGIN (IP, username, pw, TIME) VALUES ('$ip', '$username', '$password', '$time')");
include "error2.php";
}
} else {
$queryIP = mysql_query("INSERT INTO IP_LOGIN (IP, username, pw, TIME) VALUES ('$ip', '$username', '$password', '$time')");
include "error3.php";
}
}
?>