2012-07-30 7 views
6

Mi chiedevo in caso di normale operazione di selezione la ricerca è maiuscola e minuscola. Così SELECT * FROM tbl WHERE name = aBc prenderà in considerazione anche il nome con i valori ABC, ABC, abc eccSe MYSQL non fa distinzione tra maiuscole e minuscole, come funziona per il campo Password in Login?

ma in caso di funzione di login dobbiamo solo fare SELECT * FROM tbl WHERE password = aBc sarà maiuscole e minuscole e prendere in considerazione solo la password con il valore di ABC.

Come succede? Non ho trovato nulla a riguardo nelle mie ricerche.

Si prega di spiegare.

Grazie.

+0

Se si salvano le password come hash, non importa. Ed è così che dovresti farlo. –

+0

salvando la password come testo normale? ... quello era buono – Zaffy

+0

No @quarry non che mi stavo chiedendo come funziona? –

risposta

5

Penso che dipenda dalle regole di confronto delle colonne, le regole di confronto dei database predefinite in MySQL utf8_general_ci dove ci alla fine indica la distinzione tra maiuscole e minuscole.

le password sensibili al maiuscolo/minuscolo funzioneranno solo se si memorizzano le password in formato crittografato utilizzando la funzione MD5 o PASSWORD.

show variables like '%collation%'; 
+---------------------------+-------------------+ 
| Variable_name    | Value    | 
+---------------------------+-------------------+ 
| collation_connection  | latin1_swedish_ci | 
| collation_database  | utf8_general_ci | 
| collation_server   | latin1_swedish_ci | 
+---------------------------+-------------------+ 
+0

ma si comporta come maiuscole/minuscole anche se non ho password crittografate in hash. –

+0

Grazie a @Omesh penso che lo spieghi molto bene e si adatti ai miei casi di test. –

+0

Prego! :) – Omesh

1

io non sono sicuro di quello che la risposta alla tua domanda esatta è, se si sta memorizzare le password in un database come testo, che poi è una pessima idea. Quello che dovresti fare invece è cancellare la password al momento della registrazione e memorizzarla nel tuo database in quella forma. Quindi, ogni volta che un utente tenta di accedere, rehash la password inviata e la confronta con l'hash memorizzato nella riga con il nome utente corrispondente. Poiché l'hash IS fa distinzione tra maiuscole e minuscole, questo risolve il problema aggiungendo un livello di sicurezza molto necessario.

1

In molte implementazioni le password oi relativi hash vengono confrontati nel server delle applicazioni in modo che il problema non si presenti.

1

per l'uso tra maiuscole e minuscole (BINARIO)

SELECT * FROM tbl DOVE BINARIO password = aBc

+0

Questo è corretto ma non era la mia domanda thanx @KSA. –

3

$ sql = "SELECT * FROM utente dove username = '$ username' AND BINARY password = '$ password' ";