mercoledì 14 novembre 2012

Creare un login sicuro con PHP e MySQL pt. 3/4

Benvenuti nella terza parte di questo articolo. Vi ricordo che potete trovare la precedente parte del tutorial a questo indirizzo e, inoltre, ribadisco nuovamente il nostro intento: Il tema centrale del tutorial proposto non è tanto la grafica, che potrete ovviamente modificare e personalizzare a vostro piacimento, ma la sicurezza! Vedremo, infatti, i migliori metodi per criptare le password, per resistere ai brute force e per difenderci dalle SQL injection. Anche in questa terza parte, a fine articolo troverete anche il codice sorgente pronto all'uso!

La pagina process_login.php

In questa pagina andremo, prima di tutto, ad inserire il codice della procedura di login che lavorerà in parallelo con la pagina functions.php. Ecco il file:
include 'db_connect.php';
include 'functions.php';
sec_session_start(); // Inizializziamo la sessione sicura 
if (isset($_POST['email'], $_POST['p'])) {
    $email    = $_POST['email'];
    $password = $_POST['p']; // Passiamo la password criptata
    if (login($email, $password, $mysqli) == true) {
        // Se il login riesce
        echo 'Hai effettuato l\'accesso!';
    } else {
        // Se il login fallisce
        header('Location: ./login.php?error=1');
    }
} else {
    // Se la variabile non viene inviata alla pagina corretta
    echo 'Richiesta non valida!';
}

La pagina logout.php

Immediatamente dopo aver creato la procedura di login, dovremmo occuparci di costruire quella per il logout. La procedura per il logout deve contenere pochi e semplici passaggi: aprire una sessione sicura, distruggerla e redirectare l'utente verso un'altra pagina. Vediamo come:
include 'functions.php';
sec_session_start();
$_SESSION = array();
// prelevo i parametri di sessione
$params   = session_get_cookie_params();
// Cancello i cookie
setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
// Distruggo la sessione
session_destroy();
header('Location: ./');

La pagina di registrazione 

Il seguente è il codice che dovrete utilizzare nel caso, all'interno di una pagina di registrazione, necessitate di codificare la password.
// Raccolgo la password dal form
$password = $_POST['p']; 
// Creo un salto unico
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
$password = hash('sha512', $password.$random_salt);
 
// Aggiungo i dati raccolti alla query
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {    
   $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
   // Eseguo la query
   $insert_stmt->execute();
}

CONCLUSIONI E SORGENTI

Così anche la terza delle quattro parti di questo tutorial è giunta al termine. Per qualsiasi incomprensione o dubbio potete commentare questo articolo o inviarmi un email a noframe@lucapipolo.it. Potete anche scaricare tutto il codice sorgente da questo link. Alla prossima!

0 commenti:

Posta un commento