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";
}
}
?>