17. 1. autenticazione di una login

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