PDA

View Full Version : [PHP] Login


AMD64 Rulez
23-07-2007, 23:47
Ciau a tutti!

Devo realizzare il tipico login per un sito e volevo sapere quali sono le tecniche maggiormente usate per realizzarlo, ma soprattutto un modo per rendere sicuro il passaggio dei dati inseriti per il controllo nel database.
Come faccio a "proteggere" i dati durante il passaggio?

Grazie infinite :D

cionci
24-07-2007, 00:59
Solitamente i dati che si passano alla query vengono codificati tramite la funzione htmlentities con l'opzione ENT_QUOTES, in modo che vengano convertiti apici e doppi apici con la codifica html in modo da prevenire l'sql injection (cioè l'inserimento di codice sql all'interno del testo passato).

Riguardo alla tecnica per gestire la sessione, è molto semplice. Se il login ha successo, setti una variabile nella sessione (ad esempio lo username), se questa variabile esiste allora l'utente è loggato nel sistema.
Se vuoi rendere persistente il login (l'utente resta loggato anche se riavvia il browser e quindi la sessione è stata persa) allora ti conviene creare almeno due cookies:
- uno con il nome utente
- uno con uno sha1 di password + (ad esempio) timestamp di registrazione

In questo modo quando andrai a ricreare la sessione basterà verificare lo sha1 della password. Se ti interessa che possa esistere solo un browser su cui l'utente può mantenere persistente il login, allora ti basta sostituire il timestamp di registrazione con quello dell'ultimo login.

stdecden
24-07-2007, 11:44
allora se ho capito bene vuoi evitare che, tato il seguente codice php:

$res = sqlite_array_query($db,"select count(id) from Utenti where Name=\"" . $_POST['Username'] . "and Password=\"" . $_POST['Password']);

if($res[0][0] == 1)
{
echo "accesso consentito";
}


qualcuno vada a inserire come password: "OR true LIMIT 1 , riuscendo cosí a entrare nel sito senza essere registrato?!

cionci
24-07-2007, 11:59
qualcuno vada a inserire come password: "OR true LIMIT 1 , riuscendo cosí a entrare nel sito senza essere registrato?!
Si chiama appunto SQL injection.

AMD64 Rulez
24-07-2007, 13:36
Intanto grazie mille x le risposte :)
Mi avete risolto una parte del problema... ora vi faccio un'altra domanda, è possibile che durante la query qualcuno intercetti user e pass riuscendo poi ad accedere al sito con il nome di qualcun'altro?
Oppure l'unico problema per la sicurezza è l'SQL Injection?

Grassie
ciauuu :D

vizzz
24-07-2007, 14:17
potresti anche (se ne hai la possibilità) di usare una connessione protetta con ssl, quindi nella voce action del form : https://blabla.com/login.php.
ma tutto dipende dall'installazione di apache.

cionci
24-07-2007, 14:17
è possibile che durante la query qualcuno intercetti user e pass riuscendo poi ad accedere al sito con il nome di qualcun'altro?
Certo, i dati inviati dalle form passano codificati in base64, quindi praticamente sono in chiaro. Per risolvere il problema l'unico modo è usare un server SSL.
Chiaro che ci siano mille altri problemi di sicurezza, se non riesci a "modificare" il sistema con le vie più semplici basta salire di livello e si possono sfruttare ad esempio bug di Php, bug e configurazioni errate di Apache, bug del sistema operativo che lo ospita, configurazioni sbagliate di rete.
In prima approssimazione già controllare l'SQL injection toglie tanti possibili problemi.

Lim
25-07-2007, 08:33
Ho un problema analogo!

Sto sviluppando un sito web con un'area riservata. Per il login non ho problemi, avevo già fatto più o meno come avete consigliato sopra, ma il problema è che non devo gestire solo delle pagine dinamiche accessibili solo dagli utenti autorizzati, ma anche dei documenti in PDF!
Poichè questi risiedono fisicamente in una cartella del mio dominio (ad esempio www.miosito.it/documents), l'accesso alla pagina PHP che ne visualizza l'elenco è inutile! Infatti basterebbe accedere direttamente all'indirizzo completo del documento per visualizzarlo senza bisogno di autenticazione! :muro:

Spero di essermi spiegato bene... :rolleyes:

Pensavo di risolvere tramite i file .htaccess di apache, ma non li vedo nella root del mio dominio! (avevo sviluppato un altro sito in passato, ospitato da Aruba, e li c'era il file in questione!!) Ora invece mi appoggio ad un altro servizio, probabilmente non usano Apache..

Comunque, il fatto è che non so proprio come gestire l'accesso a file riservati, quali sono le tecniche tipiche? Avete Consigli? :help:

Grazie in anticipo!!

cionci
25-07-2007, 14:41
Allora...se non hai possibilità di usare il .htaccess allora crea una directory con un nome molto lungo e pieno di caratteri casuali. Tramite uno script php vai a leggere il file e dallo in ouput. Mi raccomando setta il corretto content-type.
In pratica ti fai uno script che permette il download di questi file pdf...ovviamente il file .php prenderà come parametro il file da scaricare.
In questo modo la directory rimarrà nascosta e nessuno ne conoscerà l'esistenza.

AMD64 Rulez
25-07-2007, 17:19
Certo, i dati inviati dalle form passano codificati in base64, quindi praticamente sono in chiaro. Per risolvere il problema l'unico modo è usare un server SSL.


E come faccio ad utilizzare un server SSL?
Se è troppo complicato, in alternativa, oltre a controllare i dati inseriti per evitare l'SQL Injection, c'è qualcos'altro che si può fare o solo sperare? :D

grassie e ciauu

cionci
25-07-2007, 18:12
Il server SSL deve essere reso disponibile dal tuo provider...

Traxsung
25-07-2007, 18:56
questo argomento è molto interessante. Ho verificato, ma aruba non supporta ssl. Me ne sapresti consigliare qualcuno ?

Grazie