scelta di md5 a parte ... una query di questo tipo per soffrire di collisioni bisogna aver fatto un abbonamento annuale con la sfortuna, giusto ???
codice:
$query = sprintf(
"SELECT id FROM user_list WHERE %s(CONCAT('%s', user, pass)) = '%s' AND %s(user) = '%s'",
$hash, $salt, $login, $hash, call_user_func(array(new SecurityForm, 'hash'), $user)
);
// $hash => a seconda della funzione di hash scelta sarà MD5 oppure SHA1
// $salt => l'hash della salt generata con uniqid(rand(), true)
// $login => l'hash della "firma" di login - hash(salt.userName.hash(password))
// SecurityForm->hash($user) => l'hash del nome utente (sql injection free)
In pratica verifica tramite la salt che la stringa login sia presente ed in più verifica che il nome utente in grado di generare la stringa di login, una volta hashato, sia identico all' hash inviato dal client del proprio nome utente ... qualcosa tipo ...
SELECT id FROM user_list WHERE MD5(CONCAT($salt, user, pass)) = $login AND MD5(user) = $user
dove la pass in db è salvata già hashata (lo user resta in chiaro)
dovrebbe essere sufficiente ? ... nel frattempo ho anche tolto le sessioni per evitare problemi di cookie o altro ... dite che basta per blindare un banale login ?
poi il discorso che se un altro utente conosce user e pass .... ovvio che entra comunque