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