PDA

View Full Version : [PHP] Funzionamento di una login


vince860
29-10-2009, 15:30
Ho ipotizzato il funzionamento di una login in quanto segue:

Una volta che l'utente inserisce i dati e clicca su "accedi":

i dati verranno inseriti all’interno di una query che ricerca un eventuale record con user e pws coincidenti con quelli specificati dall'utente;
l'eventuale record individuato dalla query viene letto:
A) se la query non ha restituito risultati, cioè non vi sono user e pwd coincidenti con quelli dell'utente o un dato differisce, viene mostrato il messaggio di accesso negato
B) se la query ha avuto successo, cioè ha riscontrato un record con user e pwd coincidenti con quelli inseriti dall'utente, verrà avviata la sessione.

è esatto?
grazie :)

wingman87
29-10-2009, 15:40
Sì, attento però all'sql injection. Ti linko wikipedia che fa proprio un esempio con php: http://it.wikipedia.org/wiki/SQL_injection

vince860
29-10-2009, 15:42
Sì, attento però all'sql injection. Ti linko wikipedia che fa proprio un esempio con php: http://it.wikipedia.org/wiki/SQL_injection
no no tranq :D mi servono solamente gli step momentaneamente, tralasciando il codice

grazie...

flx2000
29-10-2009, 17:19
La procedura che hai descritto è esatta, anche se si presta a semplici ma fondamentali ottimizzazioni per evitare i più comuni buchi di sicurezza.

euphyllia87
29-10-2009, 17:33
Ho ipotizzato il funzionamento di una login in quanto segue:

Una volta che l'utente inserisce i dati e clicca su "accedi":

i dati verranno inseriti all’interno di una query che ricerca un eventuale record con user e pws coincidenti con quelli specificati dall'utente;
l'eventuale record individuato dalla query viene letto:
A) se la query non ha restituito risultati, cioè non vi sono user e pwd coincidenti con quelli dell'utente o un dato differisce, viene mostrato il messaggio di accesso negato
B) se la query ha avuto successo, cioè ha riscontrato un record con user e pwd coincidenti con quelli inseriti dall'utente, verrà avviata la sessione.

è esatto?
grazie :)

Per ottimizzare il tutto puoi fare una SELECT COUNT, ovvero contare esattamente un campo a tua scelta (metti l'id utente) con i parametri user AND password passati; ricordati di limitare la query a 1.

Cosa significa? Che quando il motore sql troverà la corrispondenza con i campi, si fermerà li (ottimizzazione) e ti riporterà il valore integer 1.

A posto.

vince860
29-10-2009, 19:06
Grazie a tutti, mi serve solo una parte "teorica" di come funziona, tralasciando la sintessi

cruyffissimo
29-10-2009, 21:21
è perfetta come sintesi teorica, se vuoi fare una cosa ganza potresti fare in modo che se l'autenticazione fallisce, mostra il messaggio di errore, e reindirizza al form di login!:fagiano:

wingman87
29-10-2009, 23:11
Per ottimizzare il tutto puoi fare una SELECT COUNT, ovvero contare esattamente un campo a tua scelta (metti l'id utente) con i parametri user AND password passati; ricordati di limitare la query a 1.

Cosa significa? Che quando il motore sql troverà la corrispondenza con i campi, si fermerà li (ottimizzazione) e ti riporterà il valore integer 1.

A posto.

Come si limita a uno? Mi interessa per una procedura plsql che devo fare per un progetto dell'uni.

euphyllia87
30-10-2009, 08:09
Come si limita a uno? Mi interessa per una procedura plsql che devo fare per un progetto dell'uni.

coda alla SQL, LIMIT 0,1

vince860
30-10-2009, 18:51
Mi autoquoto :muro:

l'eventuale record individuato dalla query viene letto
se la query di ricerca del record con user e pwd uguali a quelli inseriti dall'utente NON ha riscontrato valori...........non verrà letto alcun record esatto?

euphyllia87
30-10-2009, 21:41
Mi autoquoto :muro:


se la query di ricerca del record con user e pwd uguali a quelli inseriti dall'utente NON ha riscontrato valori...........non verrà letto alcun record esatto?

No... restituisce un false la query... ovvero riporta un insieme vuoto.

vince860
31-10-2009, 12:11
No... restituisce un false la query... ovvero riporta un insieme vuoto.
ah...quindi cmq restituisce un valore "F" e poi effettua il redirect ad esempio a login_failder.php?

euphyllia87
31-10-2009, 12:59
ah...quindi cmq restituisce un valore "F" e poi effettua il redirect ad esempio a login_failder.php?

No ti torna un insieme vuoto e il redirect lo effettua solo se lo imposti tu.

vince860
01-11-2009, 15:20
No ti torna un insieme vuoto
sarebbe? :mc:

euphyllia87
01-11-2009, 18:18
sarebbe? :mc:

Ma una base di Matematica e SQL no? :S

wingman87
01-11-2009, 18:25
coda alla SQL, LIMIT 0,1

Grazie, appena posso provo. I parametri i=0 e n=1 vogliono dire che voglio n elementi a partire dall'iesimo?

euphyllia87
01-11-2009, 19:38
Grazie, appena posso provo. I parametri i=0 e n=1 vogliono dire che voglio n elementi a partire dall'iesimo?

Vuol dire che limito da 0 a 1 i risultati :)

Dânêl
01-11-2009, 19:55
Si potrebbe anche usare un if exists per "ottimizzare in modo estremo".
Ho letto alcuni test secondo i quali sarebbe molto più veloce di un SELECT COUNT

euphyllia87
01-11-2009, 20:22
Si potrebbe anche usare un if exists per "ottimizzare in modo estremo".
Ho letto alcuni test secondo i quali sarebbe molto più veloce di un SELECT COUNT

Secondo me è uguale. :)

vince860
02-11-2009, 10:36
Ma una base di Matematica e SQL no? :S
si, ma non ricordo bene...

praticamente se non esiste il record con id e pwd coincidenti con quelli inseriti dall'utente mi restutuisce un "record vuoto" (e quindi visualizza, ipoteticamente, un msg di errore)?