Newsgroup: it.comp.www.php
Titolo: Autenticazione in php (consigli)

Ciao a tutti
Sto sviluppando un servizio di autenticazione in PHP che ha la pretesa di
essere relativamente sicuro. Purtroppo lo devo usare su server che non hanno
https dunque non posso usare sistemi particolari di protezione dei dati che
transitano.
Il sistema è strutturato così:
Login --> Gateway --> Welcome page
Il gateway autentica, se user e password non coincidono l'utente viene
rimandato alla pagina di login.
Una volta che i dati transitano user e pwd vengono convertiti in MD5 in modo
che nel DB rimangano già cryptati e nel caso mi bucassero il DB ci sarebbero
problemi nella riconversione. ... Dimenticavo, se l'utente inserisce user e
PWD errati vengono inseriti nel DB i suoi Dati e il suo Ip. L'autenticazione
viene rifatta per ogni pagina da una pagina inclusa che si chiama
inclusa.php in modo che l'utente non possa entrare direttamente in una
pagina., il confronto viene fatto tra la user e password cryptate in md5 e
quella sul db anch'essa cryptata in md5.
La parte di admin da dove è possibile creare nuovi user è in una cartella
protetta da apache e dal sistema di Autenticazione descritto.
Ora, ho due dubbi. 1) IL'unico posto dove user e pwd passano in chiaro è
solo tra login --> Gateway in quanto poi, se user e pwd coincidono vengono
convewrtiti in MD5. Come posso proteggere il transito di questi dati? Esiste
un javascript che da un qualche tipo di protezione? Stessa domanda per
rendere più difficoltosa la visualizzazione del sorgente "login.php", come
posso nascondere l'output del php?
L'ultima funzionalità che volevo implementare era una sorta di protezione
dal tentativo di Brute Forcing delle password e ho pensato a 2 alternative:
1) Dopo che l'utente tenta 5 volte di entrare sbagliando 5 volte user o pwd
il suo ip viene bannato
2) Oppure, al quinto tentivo viene rimandato in una finta area riservata in
modo da trarlo in inganno ....
Cosa consigliate?
Intanto posto il codice della pagina gateway.php
Thanks
Claudio
<?php
session_start();
include("config.php");
$utentemd5 = md5($utente);
$passwordmd5 = md5($password);
$db=mysql_connect($host, $user, $pass);
$sqlinterr="select * from sec_users where u_username like '$utentemd5' and
u_pwd like '$passwordmd5'";
$res=mysql_db_query($dbname, $sqlinterr);
$num=mysql_num_rows($res);
if ($num==0)
{
if($today=="")
 { $today=date("Y-m-d G:i:s"); }
if($indirizzoip=="")
 { $indirizzoip=getenv("REMOTE_ADDR"); }
$sqlinterr1="insert into sec_logerror values ('', '', '$utente', '',
'$indirizzoip', '', '$today')";
$res1=mysql_db_query($dbname, $sqlinterr1);
header ("location: login.php?op=errore");}
if ($num!=0)
{
for ($i=0; $i<$num; $i++)
{
$u_id = mysql_result($res, $i, "u_id");
$u_realname = mysql_result($res, $i, "u_realname");
}
session_register(utentemd5);
session_register(passwordmd5);
session_register(indirizzoip);
session_register(u_id);
session_register(u_cliente);
{
if($today=="")
 { $today=date("Y-m-d G:i:s"); }
if($indirizzoip=="")
 { $indirizzoip=getenv("REMOTE_ADDR"); }
$sqlinterr2="insert into sec_logok values ('', '$u_realname', '$utentemd5',
'$passwordmd5', '$indirizzoip', '', '$today')";
$res2=mysql_db_query($dbname, $sqlinterr2);
header ("location: homeriservata.php");}
echo"$print";
}
?>

 sorgente "login.php", come posso nascondere l'output del php?
beh, il sorgente di un file php dall'esterno non lo vedi _mai_, anche
se tenti di scaricarlo (wget o simili) praticamente ottieni un file
html 'plain and simple' .. il php viene interpretato dal server, non
dal browser.
-- 
-andreas liebschner
 
http://www.distorta.info
rimuovi .NOSPAM per rispondermi in email

 echo"$print";
questo a che serve? non verrà mai scritto per effetto dell'header - questa


scusate se ho duplicato qualche post, ma stasera non funziona una cippa :/

 Cosa consigliate?
Ci sono varie strade, se sbaglia n volte gli lasci un cookie che la
classifica come utente pericoloso. Ovvio che lui potrà cancellare il cookie
ma comunque gli rendi la vita difficile. Altre strade sono limitate solo
dalla tua fantasia!!!
--
Stefano Vita Finzi Zalman
Pronesis.it - PCA
stefan...@pronesis.it
--
Pronesis srl
Viale Cavour 50 - 44100 Ferrara
Tel 0532 242740 (2 linee)
Fax 0532 242491
email: 
in...@pronesis.it
web: 
http://www.pronesis.it