Desideravo sapere se é abbastanza sicuro questo metodo che utilizzo io per far attivare l'account tramite e-mail all'utente che si è appena registrato.
recupero come chiave di validazione la session_id dell'utente e la memorizzo nel db dopo averla criptata con la funzione MD5.
nell'email passo il link contenente come query-string sia l'indirizzo email inserito dall'utente che l'id_sessione criptato con la funzione MD5.
"http://".$str_server.$str_script_name."?statoreg=verif&em ail=".$str_EmailAddress."&codattiv=".$str_cod_atti vazione;
questo è il codice:
codice:
<?
//------------------------------------------------------------------------------------------------
// RECUPERO IL VALORE DI TUTTI I DATI INVIATI DALL'UTENTE E LI MEMORIZZO NELLE VARIABILI
//------------------------------------------------------------------------------------------------
$str_Username_old = trim($_POST["Username_old"]);
$str_Username_new = trim($_POST["Username_new"]);
$str_Password = trim($_POST["Password"]);
$str_Password_Check = trim($_POST["Password_Check"]);
$str_EmailAddress = trim($_POST["EmailAddress"]);
$str_EmailAddress_two = trim($_POST["EmailAddress_two"]);
$str_data = time();
$str_ind_ip = $_SERVER['REMOTE_ADDR'];
$str_cod_attivazione = MD5(session_id());
$str_errore = "";
$str_stato = 0;
//dopo vari controlli su tutti i dati passati dall'utente procedo con la registrazione sul db e poi provvedo a inviare l'email.
//------------------------------------------------------------------------------------------------
// SE IL SETTING DEL GIOCO PREVEDE L'ATTIVAZIONE TRAMITE EMAIL - SI INVIA UNA EMAIL ALL'UTENTE APPENA REGISTRATO
//------------------------------------------------------------------------------------------------
If ($conf_email == 1) {
$msg_registrazione = $str031;
$str_oggetto = $str030;
$str_server = $_SERVER['HTTP_HOST'];
$str_script_name = $_SERVER['SCRIPT_NAME'];
$str_link = "http://".$str_server.$str_script_name."?statoreg=verif&email=".$str_EmailAddress."&codattiv=".$str_cod_attivazione;
$str_contenuto_email = $msg_email_att_reg;
$str_contenuto_email = str_replace("{name}",$str_Username_new,$str_contenuto_email);
$str_contenuto_email = str_replace("{old_name}",$str_Username_old,$str_contenuto_email);
$str_contenuto_email = str_replace("{email}",$str_EmailAddress,$str_contenuto_email);
$str_contenuto_email = str_replace("{ip}", $str_ind_ip,$str_contenuto_email);
$str_contenuto_email = str_replace("{link}",$str_link,$str_contenuto_email);
$headers = "From: $name<$email>\nReply-to:$email";
If (!@mail($str_EmailAddress,$str_oggetto,$str_contenuto_email,$headers)) {
echo $str207;
}
} else {
$msg_registrazione = $str028;
}
dopo di che, nella pagina che deve effettuare la verifica eseguo il seguente controllo:
codice:
<?
//------------------------------------------------------------------------------------------------
// RECUPERO IL CODICE DI ATTIVAZIONE E L'EMAIL DELL'UTENTE CHE RICHIEDE LA CONVALIDA
//------------------------------------------------------------------------------------------------
$email = trim($_GET['email']);
$codattiv = trim($_GET['codattiv']);
If ($email != "" && $codattiv != "") {
$conn = connect();
$query = "SELECT *
FROM ".$prefix_table."utenti
WHERE email = '".mysql_real_escape_string($email)."'
AND cod_attiv = '".mysql_real_escape_string($codattiv)."'";
$res = mysql_query($query,$conn) or die ($str201.": ".mysql_error());
if (mysql_num_rows($res) != 0) { // SE L'UTENTE VIENE TROVATO NEL DB PROCEDO CON L'ATTIVAZIONE DELL'ACCOUNT
$query = "UPDATE ".$prefix_table."utenti SET stato = 1
WHERE email = '".mysql_real_escape_string($email)."'
AND cod_attiv = '".mysql_real_escape_string($codattiv)."'";
$res = mysql_query($query,$conn) or die ($str201.": ".mysql_error());
//------------------------------------------------------------------------------------------------
//VISUALIZZO UN MESSAGGIO DI BENVENUTO
//------------------------------------------------------------------------------------------------
messaggio_benvenuto($str032);
} else {
messaggio_errore($str208);
}
mysql_close($conn);
} else {
messaggio_errore($str208);
}
?>
è abbastanza valido questo metodo in termini di sicurezza?