[PHP/MySQL] Comment protéger les mots de passe ? - Qu'est-il recomandé ?

Bonjour à tous, je suis en train de refaire mons ite perso en totalité et je suis actuellement en train de bosser sur la zone membres. Mais je me pose plusieurs questions concernant les mots de passe. J’ai réalisé quelques recherches sur internet mais je ne sais pas exactement quoi faire. Voici donc quelques unes de mes interrogations.

  1. Comment les stocker sur la base de données ? Bref, comment les protéger efficacement.
  2. En ce qui concerne les cookies, comment peut on stocker des données pour reconnaitre un membres facilement ? J’imagine qu’il ne faut pas stocker un mot de passe en clair dedans. Donc comment faire ?
  3. Qu’existe t il comme solutions pour pour crypter les mots de passe ?
    Donc si vous possédez quelques liens interessants, je ne suis pas contre une peu de lecture. :jap:

quand je dois stocker un mot de passe, je stocke souvent son hash sha1, pis c’est tout :neutre:

le truc le plus utilisé c’est stocker les mots de passe hashé (avec md5 ou sha1)

ensuite quand ton utilisateur veut se loguer tu hash le mot de passe qu’il a entré de le formulaire et tu le compare avec ce que tu as dans la base.

de cette façon le mot de passe n’apparait jamais en clair.

le problème si tu veux mettre des cookies :
le plus simple est de mettre un cookie avec le nom d’utilisateur et le mot de passe hashé. quand il arrive la première fois sur le site, tu regarde s’il a des cookies et s’ils sont valides.

Maintenant si quelqu’un arrive à accéder à la base de donnée, il se créera un cookie avec ton nom d’utilisateur (qui est admin) et ton pass hashé.

il ne verra jamais ton mot de passe en clair, par contre il arrivera à se loguer avec ton compte.

pour 4a j’ai aucune solution :s

Ok, je viens d’aller voir ce que disait php.net à propos de SHA1 et il y a bien une petite fonction sympa qui est : string sha1 ( string str [, bool raw_output] ).
Donc bon, j’utiliserai ceci pour stocker le mdp dans la base de données.

En ce qui concerne le cookie, pourquoi ne pas utiliser une autre forme d’encryptage (la chaine serait décrypté puis réencryptée pour etre comparée à la valeur dans la base de données) ? Encore faut il pouvoir décrypter…

par définition le hash != cryptage :neutre:

Après une petite demie heure sur Wikipédia qui m’a permis de mieux comprendre tout cela, j’ai finalement décidé d’utiliser un SHA1 pour stocker le mot de passe dans la base de données et un chiffrement en 64 bit pour le cookie.
De cette façon, si l’utilisateur se connecte grâce à un formulaire, je hash en SHA1 et compare au contenu de la base de données (et je place un cookie contenant le pass en 64bits). Sinon, si l’identification se fait par cookie, j’utilise base64_decode() suivit de sha1() puis je compare ceci au contenu de la base de données. :paf:

Comme ça, pas trop de problèmes en cas d’accès non souhaité à la base de données. :sarcastic:
Si vous trouvez une faille dans mon raisonnement, signalez le moi… :stuck_out_tongue:

Tu sais qu’à la base, via sha1 tu reçois un hash d’une chaîne de caractères (le mot de passe). Et surtout qu’il s’agit d’une fonction :

f(X : mot) -> autre mot

Qui n’est pas bijective.

Moralité? A partir d’un hash tu auras du mal à retrouver le mot de passe (sans passer par du brute force)

Puis base64_encode et base64_decode c’est un peu de la surcouche inutile : c’est une fonction de base de php, et si ça trâine dans le cookie, ça se voit.

(je veux dire : tu reconnais un hash md5 à sa gueule, idem avec ça)

Donc autant y aller directement avec du sha1, on faire du vrai cryptage (ce que je n’ai jamais fait).

Ce que je veux dire au final, c’est que tu en fais un peu trop ?