PHP  »  Articoli  »  Sicurezza di Php 

Login sicuro in Ajax e Php

di: Marco Buratto     17 Maggio 2007

La metodologia di autenticazione più utilizzata in ambito Web si basa sull'invio delle proprie credenziali - username e password - da browser a server in chiaro, cioè non cifrate.

Se non si utilizza un tunneling SSL (che comporta spese e impostazioni ad hoc), ciò può divenire un problema: in rete locale è estremamente facile utilizzare programmi che intercettino il traffico di rete (sniffing) e conseguentemente riuscire ad ottenere l'accesso al programma Web remoto, utilizzando, appunto, le credenziali altrui così carpite (reply attack).

Questo breve articolo verte su uno stratagemma per evitare l'invio in chiaro della password. Nel nostro script il browser invia lo username; il Web server crea una "sfida" (stringa casuale) e la invia al client; il browser codifica la sfida con la password personale inserita dall'utente ed invia la stringa ottenuta (password_inviata). Si ha, così, che la password personale non viene mai inviata tra client e server (tranne ovviamente una volta, la prima), ma entrambi la conoscono (il server la conserva "gelosamente" nel database, l'utente si spera solo nella sua testa).

Per questo login ho usato una codifica del tipo:

password_inviata = hash (sfida + hash (password_personale) ), con hash scelto = MD5 (SHA1 sarebbe ancora migliore);

Al termine del processo il Web server controlla la validità del login. L'utente è autenticato se:

MD5 (sfida + MD5 (password_personale) ) = password_inviata.

Poiché le tecnologie server-side non conservano la password_personale nel database in chiaro, ma memorizzano il suo hash (qui MD5), si ha che l'utente è autenticato se vale:

MD5 (sfida + password_personale_in_database) = password_inviata.

I preparativi: il database

Il database usato è MySQL, il quale viene pilotato dalla libreria di astrazione ADOdb. La programmazione assistita da questo "wrapper" porta con sé indiscutibili vantaggi ma, poiché non è questa la sede per discuterne, diciamo solo che il suo utilizzo è davvero semplice, quindi, perché non provarlo?

Passi per l'installazione e la messa in strada scarichiamo ADOdb da sourceforge.net e scompattiamone l'archivio che da solo creerà la cartella adodb; poi creiamo (all'interno della cartella adodb) un file di connessione al database (tutti i file con tutta la procedura li trovate anche al link download in alto nell'articolo):

Il file db_conn.php

<?php
require_once ("adodb.inc.php");

$HOSTNAME = "localhost";
$DBTYPE   = "mysql";
$DATABASE = "nome_database";
$USERNAME = "mysql_username";
$PASSWORD = "mysql_password";
$LOCALE   = "It";

ADOLoadCode ($DBTYPE);
$db_conn = &ADONewConnection($DBTYPE);
$db_conn->PConnect($HOSTNAME, $USERNAME, $PASSWORD, $DATABASE, $LOCALE);
?>

Il file si occupa di creare l'oggetto per la connessione al database ed il suo utilizzo. Le credenziali per l'accesso sono naturalmente da modificare.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti