Je connais l'argument de l'injection SQL. Mais l'existence d'annuaire de hash MD5 rend la protection caduque. Du coup, pour éviter les injections SQL, le seul moyen est de les éviter en codant correctement les requêtes.
Mais dans l'absolu, c'est un problème de compromis. J'ai travaillé sur un SI où j'avais accès à l'ensemble des mots de passes de l'ensemble des clients de la société qui m'employait. C'est quelque chose qui m'avait choqué, mais à l'usage, il n'était pas possible de faire autrement. Ça aurait été trop coûteux.
Je ne vois pas la différence de difficulté d'usage entre MD5 et SHA qui justifierai qu'on privilégie une méthode dépassée, en laissant croire qu'on a apporté une protection suffisante.
Il faudra dire à la Caisse d'Épargne que 4 chiffres c'est trop faible ;) Mais je suis d'accord dans l'absolu que ce n'est pas suffisant. Mais alors pourquoi proposes-tu de générer un mot de passe faible ?
Ce que je proposerais est plutôt un truc de ce genre :
<?php
define(CANDIDATES, 'abcdefghijk....z12...90$!@') ;
define(SIZE_PWD, 42) ;
$password = substr(str_shuffle(CANDIDATES), 0, SIZE_PWD) ;
Ensuite, si tu veux donner la possibilité à l'utilisateur de choisir son mot de passe 'azerty', c'est un choix bien plus dangereux que d'enregistrer les mots de passe en clair dans la base de données ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.