Post by Mago di OzCome indicato in oggetto sono certo che il quesito sia di interesse
generale.
Secondo voi quali sono le soluzioni migliori per proteggere il file .php con
i logins al dbase? Voi come fate?
Creo un file con nome pseudo-casuale, con dentro le password in chiaro,
fuori dal document tree.
Le circostanze che consentirebbero ad un ipotetico Tizio di leggersi le
password e connettersi al DB, sono le stesse che gli consentirebbero di
connettersi al DB anche senza avere la password.
Per esempio, le password le tengo in chiaro. Potrei criptarle. Pero' il
PHP al database si deve connettere, e quindi deve leggersi quelle pass,
DECRIPTARLE e usarle. Se uno ha accesso al codice PHP, gli ci vuole due
secondi per decriptare le password.
In alternativa, se l'accesso lo fai solo tu puoi farti chiedere la pass
ogni volta; il PHP la terra' solo in memoria (e nel file di sessione!),
sicche' a meno di avere accesso al disco o alla rete, un attaccante non
puo' fare molto... e se ha quell'accesso, della password gli importa in
modo molto relativo.
Un modo un po' aggrovigliato se hai utenti autenticati _e_ almeno *DUE*
utenze per il database e' questo:
- ti crei un utente guest, con diritto di sola lettura, solo su
una tabella "user_login".
- Qui c'e' solo l'utente e la pass in MD5, e un campo extra che
contiene la password dell'utente "user" del database, cifrata
con cifratura simmetrica. La chiave e' la pw utente.
Un anonimo compare, fornisce user e password, e il sistema verifica che
MD5(user) e MD5(password) esistano nell'elenco. Se li trova, allora usa
la pw utente per decrittare la pw di "user", chiude la connessione come
"guest" e diventa "user" (che ha i diritti di lettura sulle tabelle del
resto del database, scrittura dove deve, e nient'altro).
Certo, se uno accede al disco e sovverte il codice PHP, il primo che si
logga fornisce i dati per sblindare tutto l'altarino... e, se mai cambi
la password di "user", sei morto, perche' non hai modo di aggiornare il
database degli utenti (non puoi fare SymCrypt($newpassword, $userpass),
dato che non hai $userpass ma solo il suo MD5).
Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?