14-12-2010, 02:34 PM
Pour le coup du hash, ce n'est utile que pour des données critiques, et en général sur la table utilisateur uniquement. (où autre s'il y a d'autres tables "critiques")
En select, on en a rarement besoin en général, un vérifie le hash uniquement lorsque l'utilisateur se connecte pour être sûr qu'un indésirable n'est pas venu modifier le mot de passe (pour pouvoir se connecter avec son compte) ou le profil de l'utilisateur (pour obtenir des droits plus importants).
Ensuite, ça peut se faire directement dans la requête :
Donc, comme tu vois, pas de requête supplémentaire, juste une requête un peu plus complexe. Là c'est un exemple où, si le hash est faux, alors l'utilisateur ne remonte pas, mais tu peux très bien mettre la vérification au niveau du select pour remonter l'info sous la forme d'un flag vrai/faux pour pouvoir mettre en place un traitement alternatif adéquat (envoie d'un mail à l'administrateur comme quoi un compte semble avoir été modifié par une mauvaise source)
C'est un principe que j'ai utilisé lors de développement d'application bancaire pour lesquelles l'accès aux données n'étaient pas critique (tout le monde peut les voir) mais pour lesquels il fallait être sûre qu'elle n'aient pas été altérée par une source différente.
Petite précision, la graine (chaîne "MA_GRAINE" rajouté dans le CONCAT) ne doit pas être stockée dans la base de donnée, mais uniquement dans le code PHP.
En select, on en a rarement besoin en général, un vérifie le hash uniquement lorsque l'utilisateur se connecte pour être sûr qu'un indésirable n'est pas venu modifier le mot de passe (pour pouvoir se connecter avec son compte) ou le profil de l'utilisateur (pour obtenir des droits plus importants).
Ensuite, ça peut se faire directement dans la requête :
-- vérification en select :
SELECT * FROM utilisateur WHERE login = 'jeckel' AND MD5(CONCAT(login, password, profil, "MA_GRAINE")) = mon_hash;
-- En mise à jour :
UPDATE utilisateur
SET password = "mot_de_passe_crypté", profil = "id_profil",
mon_hash = MD5(CONCAT("jeckel", "mot_de_passe_crypté", "id_profil", "MA_GRAINE"))
WHERE login = 'jeckel';
Donc, comme tu vois, pas de requête supplémentaire, juste une requête un peu plus complexe. Là c'est un exemple où, si le hash est faux, alors l'utilisateur ne remonte pas, mais tu peux très bien mettre la vérification au niveau du select pour remonter l'info sous la forme d'un flag vrai/faux pour pouvoir mettre en place un traitement alternatif adéquat (envoie d'un mail à l'administrateur comme quoi un compte semble avoir été modifié par une mauvaise source)
C'est un principe que j'ai utilisé lors de développement d'application bancaire pour lesquelles l'accès aux données n'étaient pas critique (tout le monde peut les voir) mais pour lesquels il fallait être sûre qu'elle n'aient pas été altérée par une source différente.
Petite précision, la graine (chaîne "MA_GRAINE" rajouté dans le CONCAT) ne doit pas être stockée dans la base de donnée, mais uniquement dans le code PHP.