17. 1. autenticazione di una login
Transcript
17. 1. autenticazione di una login
Effettuare un' autenticazione di login Creazione di uno script lato server per assegnare ad un utente l'accesso ad una sezione riservata, privilegiata comporta: 1. inserimento dei dati dell'utente in un form 2. confronto con i dati degli utenti autorizzati all'accesso alla sezione, che si trovano generalmente in una tabella nel db sul server. Nella tabella degli utenti "privilegiati" dovranno essere presenti le credenziali username e password. Fondamentale sarà la richiesta di username e password; se uno dei due dati risulterà sbagliato il sistema segnalerà l'errore, ma non dirà quale dei due campi è errato. la password verrà inserita in forma crittografata md5() per PHP. Per tale applicazione si realizzano due pagine • login.php per l'autenticazione o uso della tecnica postback (mette insieme form di inserimento e codice php in una unica pagina dinamica) o è strutturata in tre if sequenziali che controllano verifica se si è in logout cioè se si è verificata la volontà di uscire. In tal caso vengono cancellate tutte le variabili di sessione e richiamata la pagina iniziale. verifica se i dati inseriti sono errati verifica su nomeUtente e password ricevuti cioè se sono già stati riempiti dall'utente a questo punto si ha la connessione al db e la ricerca In caso contrario, se non siamo loggati visualizziamo la pagina di login (form) • riservata.php mostra l'accesso alla sezione riservata LOGIN.PHP <?php session_start(); //funzione che rende attive le variabili di sessione if(isset($_GET['logout']) && $_GET['logout']==1) //Verifica se Logout { $_SESSION=array(); //Reset di tutte la variabili di sessione session_destroy(); //Eliminazione della sessione header("Location: login.php"); //Richiamo la pagina di login exit; //Termine dello script } if (isset($_GET['errno']) && $_GET['errno']==1) //Verifico se dati inseriti errati { echo "<B>Utente o password sconosciuti</B><BR>"; } if(isset($_POST['utente']) && isset($_POST['pwd'])) //Verifica postback su nome utente e password ricevuti { //connessione al database inserendo come parametri //l'indirizzo del server, l'utente e la password del DBMS $db = mysql_connect("localhost","root","") or die ("Non riesco a creare la connessione"); mysql_select_db("utenti") or die ("Non trovo il DB"); //selezione database utenti $sql="SELECT nome_utente,password FROM users WHERE "; //creazione stringa di SQL $sql.="nome_utente='".$_POST['utente']."' AND password='".$_POST['pwd']."';"; echo " ".$sql."<br>"; //esecuzione query. Il risultato è nella recordset $ris $ris = mysql_query($sql) or die ("Query fallita!"); $trovato=false; //ciclo che legge il recordset con la funzione mysql_fetch_array //quando non ci sono più righe $riga vale false while ($riga = mysql_fetch_array($ris)) { //Salvo nelle var di sessione i dati rintracciati dal database $_SESSION['user']=$riga['nome_utente']; $_SESSION['pwd']=$riga['password']; $trovato=true; } //rilascio connessione mysql_close(); //Verifica se utente è stato trovato, quindi se dati di sessione validi if ($trovato) { //Richiamo la pagina riservata header("Location: riservata.php"); } else { //Richiamo la stessa pagina se dati inseriti errati header("Location: ".$_SERVER['PHP_SELF']."?errno=1"); } } else { //Se non siamo loggati, visualizzazione pagina di login echo "<FORM METHOD=POST ACTION='".$_SERVER['PHP_SELF']."'> username:<INPUT TYPE=TEXT SIZE=20 NAME=utente><BR> password:<INPUT TYPE=PASSWORD SIZE=20 NAME=pwd><BR> <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=LOGIN><BR>"; echo "</FORM>"; } ?> RISERVATA.PHP <?php session_start(); //Verifica se dati di sessione attivi e sono corretti if (isset($_SESSION['user']) && isset($_SESSION['pwd'])) { //verifico se esistono nel database (per maggiore sicurezza) $login_user=$_SESSION['user']; $login_pwd=$_SESSION['pwd']; //Ricerco nuovamente i dari di sessione nel database: solo per //scongiurare eventuali attacchi hacker //connessione al database inserendo come parametri //l'indirizzo del server, l'utente e la password del DBMS $db = mysql_connect("localhost","root","") or die ("Non riesco a creare la connessione"); //selezione database utenti mysql_select_db("utenti") or die ("Non trovo il DB"); //creazione stringa di SQL $sql="SELECT nome_utente,password FROM users WHERE "; $sql.="nome_utente='".$login_user."' AND password='".$login_pwd."';"; //esecuzione query. Il risultato è nella recordset $ris $ris = mysql_query($sql) or die ("Query fallita!"); $trovato=false; //ciclo che legge il recordset con la funzione mysql_fetch_array //quando non ci sono più righe $riga vale false while ($riga = mysql_fetch_array($ris)) { $utente=$riga['nome_utente']; $trovato=true; } //rilascio connessione mysql_close(); //Verifica se utente è stato trovato, quindi se dati di sessione validi if ($trovato) { //Stampa dati di pagina di benvenuto echo " Benvenuto: <B>".$utente."<BR>"; echo "<HR>I tuoi dati sono stati riconosciuti validi<HR>"; echo "QUESTA PAGINA E RISERVATA A TE<BR>"; echo "<A HREF='login.php?logout=1'>logout</A>"; } else { //Se non è vero significa che i dati di sessione sono maligni //Reset di tutte la variabili di sessione $_SESSION=array(); //Eliminazione della sessione session_destroy(); //Richiamo la pagina di login header("Location: login.php?errno=1"); } } else { //Richiamo la pagina di login header("Location: login.php?errno=1"); } ?>