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?