Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Autenticazione in pratica

I processi di autenticazione presenti in una applicazione Web in PHP
I processi di autenticazione presenti in una applicazione Web in PHP
Link copiato negli appunti

Un buon punto di partenza sull'autenticazione Web di un utente e successiva creazione della sessione a questi relativa può essere il seguente:

<?php
require('db_conn/mysql.php');
 
if (isset($_POST['user']))
  {
  $query_login="SELECT * FROM tabella_utenti
                WHERE usr='".filtra_caratteri_dannosi($_POST['user'])."'
                AND pwd='".md5($_POST['pwd'])."'";
  $rslt_login=$mysqlwrapper->Execute($query_login) or die("Errore di autenticazione. ");
 
  if (!$rslt_login->EOF)
    {
    // Esiste un record con questi username più(firma)password:
    // inserisco i dati nella sessione

    session_start();
    $_SESSION['Username']=$rslt_login->Fields('usr');
    $_SESSION['Usergroup']=$rslt_login->Fields('group');
    header('location:main.php');
    }
   else header('location:login_failed.php');
  }
?>
 
<html>
<head>
<title>Esempio login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body onLoad="document.form1.user.focus()">
<form name="form1" method="POST" action="index.php">
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>Nome utente: </td>
      <td><input name="user" type="text" id="user"></td>
    </tr>
    <tr>
      <td>Password: </td>
      <td><input name="pwd" type="password" id="pwd"></td>
    </tr>
    <tr>
      <td colspan="2"><input name="Submit" type="submit" value="Entra"></td>
    </tr>
  </table>
</form>
</body>
</html>

Nel codice si ha un semplice form Web tramite il quale vengono richiesti all'utente username e password. Una volta che questo sia stato compilato, viene richiamata la stessa pagina (con i dati del form in POST vars) ma questa volta viene eseguita la prima parte di essa.

Qui si confrontano username e password inviati con quelli salvati su database. È buona norma non salvare le password in chiaro sul database ma, in loro vece, il loro hash; di qui: confrontiamo nome utente più hash della password. Si veda di seguito per maggiori informazioni.

Se esiste un utente su db con tali username e password, l'utente remoto è autenticato e per esso salviamo via sessione il suo username e (qui come esempio) il suo ipotetico gruppo di appartenenza (per definirne possibili permessi di visualizzazione) e reindirizziamo il flusso della navigazione alla pagina main.php. In caso contrario reindirizziamo alla pagina di errore login_failed.php.

Per ogni nuova pagina (tranne che per login_failed.php), viene fatto il seguente controllo lato server.

<?php
// Controllo accesso
session_start();
if (!isset($_SESSION['Username']))
  {
    header('location:login_failed.php');
  exit;
  }
 
// Il resto dello script
?>

Al fine di controllare se l'utente può visualizzare tale pagina (e quindi abbia precedentemente superato con successo la procedura di log-in), è sufficiente controllare se per esso esiste una sessione - cioè se il SID inviato corrisponde ad un file di sessione su server - verificando che una delle variabili che prima gli avevamo associato esista.

Tramite queste stesse variabili conosciamo anche l'identità dell'utente che sta visualizzando la pagina e possiamo regolarci di conseguenza, a seconda di ciò che la nostra applicazione deve fare.

Secondo questa metodologia, possiamo associare all'utente quante informazioni vogliamo, ma è bene non esagerare per non compromettere inutilmente le prestazioni del sistema.

Sessioni a nudo

Un nome reale di file di sessione (lato server, ricordiamo) è il seguente: sess_89c385f4cfe5f7fc5b5f71ca320d78e9

Un suo possibile contenuto:

Username|s:5:"marco";Usergroup|s:1:"2";

Infine, il cookie (eventuale) che memorizza il SID della sessione (lato client):

Figura 3: il contenuto di un cookie
il contenuto di un cookie

Ti consigliamo anche