authenticate() case insensitive?!

Salve a tutti,

sto scrivendo un'applicativo PHP/MySql per prendere confidenza con lo Zend Framework.

Ho avuto dei problemi nel sistema di autenticazione utenti.

Questo un estratto del codice (abbastanza standard):

$db = conn_db::getAdapter();

$authAdapter = new Zend_Auth_Adapter_DbTable($db);

$authAdapter->setTableName('test_users')

                      ->setIdentityColumn('USERNAME')

                      ->setCredentialColumn('PASSWORD');

$authAdapter->setIdentity($username)

                      ->setCredential(md5($password));

$result = $authAdapter->authenticate();

Questo codice funziona in generale, ma ho notato che il metodo autenticate tratta i valori passati in modo case-insensitive.

Cioè se nel database ho un utente chiamato ad es. Mario, l'autenticazione va a buon fine sia che venga passato (es. tramite un form) mario, MaRiO, MARIO ecc ecc.

Come ben sapete questo non è tanto sicuro...

Mi sapete dire per cortesia se sto usando in modo scorretto il metodo autenticate, o se ho commesso qualche altro errore, oppure è un baco?

saluti

Marco

inviato 8 anni fa
marcowild
X 0 X

Zend_Auth_Adapter_DbTable effettua il confronto degli username nello statement SQL, quindi il confronto tra le stringhe è a carico di MySQL.

MySQL a sua volta effettua il confronto tra le stringhe in base alla "collation" impostata per la tabella o per la particolare colonna.

Ad esempio la collation "latin1_general_cs" è case sensitive mentre quella "latin1_general_ci" non lo è.

Morale della favola: devi cambiare collation alla colonna degli username.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao,

non ci ho proprio pensato  :P! Pensa che ho fatto il debug su quella libreria per capire come costruiva la select, ed infatti mi sembrava tutto in regola!

A volte si perde più tempo in queste cose...

Che dirti se non grazie mille!  :)

saluti :bye:

marco

risposto 8 anni fa
marcowild
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda