Autenticazione in PHP.



Похожие документы
Procedura di login e sessione

La connessione ai database MySQL tramite script PHP versione 5.5

2011 Politecnico di Torino 1

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

Connessione con MySQL

MY SQL Guida MySQL di base

Connessione con MySQL

Esercitazione PAM. (Php Apache MySQL)

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Laboratorio di Progettazione Web

Obiettivo dell esercitazione

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Installazione di EasyPhp. Avviare EasyPhp. La finestra di amministrazione di EasyPhp

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Lavorare con MySQL Parte Seconda.

Sicurezza Informatica: Tecniche di SQL INJECTION

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

PHP & MySQL. Giselda De Vita

M963 ESAME DI STATO DI ISTRUZIONE SECONDARIA SUPERIORE Indirizzo: INFORMATICA E TELECOMUNICAZIONI ARTICOLAZIONE INFORMATICA Tema di: INFORMATICA

Manuale utente Gestione Utenti Portale Albo

Laboratorio Progettazione Web PHP e FORMs HTML - Lezione 8. Andrea Marchetti IIT-CNR 2011/2012

LO SVOLGIMENTO DEL TEMA DI INFORMATICA

Interazione con l utente : i moduli.

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

Manuale utente Gestione Utenti Portale Albo

Soluzione traccia Informatica simulazione d esame di Stato Istituto GAUSS. 15/04/2013

Manuale Utente Guglielmo SmartClient

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

PHP e MySQL. Scripting server-side per accesso a DB MySQL

GADWEB 2.0 news REGISTRAZIONE UTENTI e Nuove funzioni ADMIN

Esercizi su JavaScript, DOM e Web Storage

PHP e Structured Query Language

VIVAIO LAUDENSE RELAZIONE

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

ESAME DI STATO I.T.E. A.S

Non vedo l ora Realizzazione di un sistema per la gestione dell orario scolastico

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

SOLUZIONE ESAME DI STATO 2014/2015 INFORMATICA. Giselda De Vita 2015

Guida introduttiva al PHP

Punti Internet Provincia di Torino. Manuale Utente

Registrazione al Portale SINTESI Istruzione 7537

Data di emissione: 17/05/2011

Disabilitare il cambio password in WordPress

Magazzino: software di gestione di un database di strumenti musicali

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

D B M G Il linguaggio HTML

SOLUZIONE ESAME DI STATO 2014/2015 INFORMATICA. Giselda De Vita 2015

EdilConnect. Cremona, 30 maggio 2017

SISTEMA INFORMATIVO PER LA GESTIONE VIA WEB DEL NUOVO CIMITERO DEL COMUNE DI GIFFENGA

LINEE GUIDA e ISTRUZIONI TECNICHE

Транскрипт:

Autenticazione in PHP. Negli script di amministrazione o di accesso a servizi riservati, è assolutamente necessario una procedura di autenticazione con Login e Password (autenticazione in base a cosa si sa). Una procedura di autenticazione deve salvare lo stato utente ricordando il login effettuato. Risulta quindi indispensabile la gestione di sessioni ed il loro rilascio in fase di logout. In questa lezione vedremo come implementare delle funzioni per l autenticazione in PHP. La tabella MySQL di supporto La struttura della tabella è la seguente : CREATE TABLE Users ( user_id VARCHAR(40) NOT NULL PRIMARY KEY, username VARCHAR(40) NOT NULL UNIQUE, password VARCHAR(40) NOT NULL ) Il campo aggiuntivo user_id è una stringa univoca. Essa viene creata in fase di registrazione del utente. In questo modo è possibile effettuare i controlli soltanto su di essa, senza portare avanti le informazioni accoppiate username e password. L informazione user_id sarà contenuta in una variabile di sessione registrata ($uid). Nella sezione riservata, verrà effettuato un controllo su tale variabile. Se non è settata, significa che un utente non autenticato tenta di accedere alla pagina protetta. In fase di log out, si effettua il rilascio della sessione e il reset della variabile $uid. La struttura dello script Per implementare i nostri script di autenticazione, ci basiamo su una libreria di funzioni per la registrazione, il login e la visualizzazione del form di registrazione/autenticazione. I file che fanno parte del nostro sistema di log in sono : auth.php registrazione.php login.php pagina.php La libreria di funzioni Lo script di registrazione Lo script di autenticazione La pagina protetta pagina.php Mostriamo prima di tutto il file pagina.php. Esso è una pagina di contenuto protetto che deve essere visualizzato soltanto dagli utenti loggati : /* una pagina riservata*/ if (isset($uid)) { <HTML><HEAD><TITLE>Pagina Riservata</TITLE></HEAD> <BODY><H2>Bravo! sei autenticato</h2>

La struttura dello script <br> <a href="login.php?action=out">log Out</a><br> </BODY> //non sei autenticato // contenuto non protetto <HTML><HEAD><TITLE>Pagina Riservata</TITLE></HEAD> <BODY><H2>Effettua il login o registrati!</h2> <br> <a href="login.php?action=in">log In</a><br> <a href="registrazione.php">registrati</a><br> </BODY> Osservate come viene protetta la pagina semplicemente osservando lo stato della variabile di sessione $uid. Se essa non è settata, viene visualizzato un messaggio di errore ed i link che portano al file di login (lo script che effettua il login ed il logout è lo stesso; si specifica l action in una querystring) ed a quello di registrazione. login.php Questo script si occupa dell autenticazione e del logout. Il codice è il seguente : /* script di login Autore : Domenico Nappo */ include("auth.php"); if ($REQUEST_METHOD!='POST') { if ((isset($uid))&&($action=='in')) { //sei già autenticato echo 'Sei stato autenticato con successo elseif ((isset($uid))&& ($action=='out')){ session_unset(); session_destroy(); echo "<H2>Arrivederci.</H2><br> <a href='login.php?action=in'> Log In</a>"; form_login('login'); $msg=login($username,$password,&$uid); if ($msg=='') { echo 'Sei stato autenticato con successo

form_login('login',$msg); Se si chiama lo script con una querystring action=out, significa che si vuole effettuare il logout. In questo caso, si rilascia la sessione e si saluta l utente, mostrando il link a login.php (questa volta con action=in) per effettuare un nuovo login. Se l action è in, si visualizza il form per l autenticazione. La funzione che si utilizza per il form di autenticazione e di registrazione è la stessa: essa discrimina se si tratta di un login o di una registrazione per un nuovo utente grazie al parametro $action che le viene passato come primo argomento. Vedremo meglio il suo semplice funzionamento quando parleremo delle funzioni presenti nella nostra libreria auth.php. Tornando allo script login.php, se il metodo con cui è stato richiamato lo script è POST, vuol dire che si è già visualizzato il form di autenticazione e adesso si cerca di loggarsi. Lo script richiama la funzione login(), a cui vengono passati i parametri $username e $password e restituisce un messaggio $msg, da cui si valuta il successo dell operazione. Se $msg è vuoto, non c è stato alcun errore, altrimenti viene richiamata la funzione form_login() esplicitando l argomento opzionale che indica l errore di autenticazione. Alla funzione login() viene passato per riferimento la variabile $uid, in modo che il suo cambiamento all interno dela funzione sia visibile anche all esterno di essa e possa così essere registrata correttamente dalla funzione session_register(). registrazione.php Questo script si occupa della registrazione degli utenti. Utilizza anch esso delle funzioni contenute nella libreria auth.php. /* Script di registrazione Autore: Domenico Nappo */ include ("auth.php"); if ($REQUEST_METHOD=='POST') { $msg=registra($username,$password,&$uid); if ($msg=='') { echo 'Sei stato registrato con successo form_login('registrazione',$msg); form_login('registrazione'); La struttura di questo script è davvero molto semplice: se si è chiamato lo script da un modulo HTML, significa che si sta tentando una registrazione. A questo scopo, si effettua una chiamata alla funzione registra(), a cui vengono passati gli argomenti $username e $password

La struttura dello script (provenienti dal modulo HTML), oltre alla variabile di sessione passata per riferimento. Il controllo sul successo dell operazione (che potrebbe fallire nel caso ci sia un utente registrato con la stessa username scelta da chi ha richiesto la registrazione attuale) viene effettuato allo stesso modo del login, cioè sulla variabile $msg. Se c è un errore (la variabile $msg non è vuota), si visualizza il form di registrazione con relativo messaggio di errore tramite l istruzione: form_login('registrazione',$msg); Se invece non si proviene dal modulo di registrazione, si visualizza quest ultimo. auth.php Questa libreria è il cuore del nostro sistema di script di autenticazione. Esaminiamo un blocco alla volta : function form_login($action,$msg=' ') { $action1=$action.'.php'; echo " <HTML><HEAD><TITLE>$action</TITLE></HEAD> <BODY><FORM action='$action1' method='post'> <TABLE border='1' align='center'><tr><td colspan=2> Form di $action <TR><TD>Username :</TD> <TD><INPUT type='text' name='username' size='10' maxlength='10'> <TR><TD>Password :</TD> <TD><INPUT type='password' name='password' size='10' maxlength='10'> <TR><TD colspan=2> $msg <TR><TD colspan=2> <INPUT type='submit' value='$action'> </TABLE></FORM></BODY></HTML>"; La funzione form_login() visualizza un modulo che, a seconda dell action, risulta puntare allo script di registrazione o di login, impostandola, all atto della chiamata, proprio come il nome del file a cui si vuol far puntare lo script. Il messaggio di errore è vuoto per default. function registra($usr,$passwd,&$uid) { include("corso.inc.php"); $conn=connect($host,$user,$pass,$db); $query="select * FROM Users WHERE username='$usr'"; $res=mysql_query($query,$conn) or die(mysql_error()); if (mysql_num_rows($res)==0) { $passwd=md5($passwd); $uid=md5(uniqid(rand())); $query_ok="insert INTO Users VALUES('$uid','$usr','$passwd')"; mysql_query($query_ok,$conn); $msg=''; mysql_close($conn); $msg='user_id già presente. Sceglierne un altro';

Questa funzione viene richiamata per la registrazione dell utente. Si controlla prima se nel database è già presente la username scelta (in questo caso il messaggio di errore ritornato non è vuoto). Se non è presente, si cripta la password con la funzione md5() e si genera un userid con una combinazione md5(), uniqueid() e rand(), per far in modo che l userid generato sia univoco (anche se c è un piccolo margine di probabilità che questo non accada). I dati così ottenuti vengono inseriti nel database e la funzione ritorna la variabile $msg come vuota, per indicare il successo dell operazione. Inoltre, la variabile $uid, passata per riferimento, all uscita della funzione sarà automaticamente registrata come variabile di sessione. function login($usr,$passwd,&$uid) { include("corso.inc.php"); $conn=connect($host,$user,$pass,$db); $passwd=md5($passwd); $query="select * FROM Users WHERE username='$usr' AND password='$passwd'"; $res=mysql_query($query,$conn); if (mysql_num_rows($res)!=0) { $row=mysql_fetch_row($res); $msg=''; $uid=$row[0]; mysql_close($conn); $msg='username o password errata.riprovare'; Questo è l ultimo blocco della nostra libreria e consiste nella funzione login(). La sua interfaccia e la sua logica di funzionamento è simile a quella della funzione registra(), ma in questo caso ci limitiamo soltanto a verificare la presenza della coppia username-password proveniente dal form di login. Se tale coppia è presente nel nostro database di utenti, allora poniamo $uid pari al campo corrispondente presente nel record prelevato. Tale variabile viene così registrata, garantendo l accesso alla pagina protetta pagina.php. Se non ci sono righe presenti, si ottiene un errore e si ritorna un messaggio di errore senza settare la variabile $uid, rendendo impossibile l accesso all area riservata agli utenti autenticati. Questa interessante lezione (spero pensiate lo stesso anche voi!) è terminata. Nella prossima si parlerà di uno degli aspetti che caratterizzano la programmazione web professionale : il templating.?2002 By Domenico Nappo, Domenico Surace e Manuali.net L autore declina ogni responsabilità per eventuali (quanto improbabili) danni recati al sistema per l uso degli script di esempio riportati in questa guida.