Quelles sont les meilleures pratiques pour chiffrer les mots de passe stockés dans MySql via PhP?
Je suis à la recherche de conseils sur la façon de en toute sécurité stocker les mots de passe en MySQL à l'aide de PHP.
Donnant sur les limites de PHP lui-même, je veux en savoir plus sur le salage, le hachage et de chiffrement de ces mauvais garçons.
Évidemment, les gens vont continuer à utiliser des mots de passe faibles moins d'y être forcé de faire autrement, mais c'est la façon dont je suis le stockage qui est important pour moi. Mes mots de passe utilisateur sont beaucoup plus importantes pour moi que la base de données elle-même, et, comme telle, je veux les garder dans une telle manière qu'il sera laborieux et monotone pour n'importe quel script kiddie essayer inverse. Évidemment, avec une diligence raisonnable à peu près tout peut être vaincu, mais je ne me dérangerait pas de faire ceci est particulièrement gênant.
Il y a deux scénarios que nous recherchons.
- Le kiddie a une copie complète de la base de données.
- Le kiddie a une copie complète de PHP utilisée pour élaborer le mot de passe, et la base de données.
Tout et tous les conseils sur ce sujet est gracieusement apprécié.
Sont vos utilisateurs locaux ou sur internet?
À la fois local et internet. Je préfère ne pas dépendre des ressources de l'internet, mais je suppose que cela pourrait être une option (par exemple. prenez le sel d'un fournisseur tiers.)
La question a été répondu à près d'un millier de fois sur stackoverflow
voulais juste préciser que le premier commentaire. InstaPaper récemment abandonné leur aucun mot de passe requis de la pensée. Les mots de passe sont maintenant tenus à InstaPaper lire la suite ici blog.instapaper.com/post/2318776738
OriginalL'auteur | 2010-12-20
Vous devez vous connecter pour publier un commentaire.
Utilisation
bcrypt
. Si quelqu'un a la table utilisateur de votre base de données, ils peuvent utiliser la force brute/rainbow tables/etc au contenu de leur coeur. Même avec du sel, si vous êtes à l'aide de MD5 ou certains autres fast-algorithme de hachage (qui ne sont pas conçus pour résoudre ce problème, par la voie); c'est juste une question de temps avant qu'il peut être craqué.Tout le bien-connu et largement pris en charge algorithme de hachage va avoir cette même "défaut" (si on peut appeler ça comme ça; c'est vraiment par définition). La différence est que
bcrypt
est lent que la mélasse lors de l'exécution de l'opération hachage, le rendu d'une attaque par force brute sont beaucoup moins efficaces.Pour absolument un grand débat sur les mérites de
bcrypt
, les dangers d'autres approches, et de la difficulté du mot de passe de sécurité en général, lire ce fil. Il y a beaucoup de commentaires par beaucoup de gens qui sont beaucoup plus informés sur ce genre de chose que je suis, et il devrait vous aider à mieux comprendre les questions en jeu.+1 pour répéter le site web.
Machine Lol, j'ai pensé que je pourrais m'en sortir alors que j'étais à taper le reste de ma réponse 🙂
Et si votre vraiment ne se soucient pas de temps, ou votre serveur est un ordinateur géant: il suffit de régler la travail facteur à 10000.
Ici, vous allez: news.ycombinator.com/item?id=2004833 j'ai aussi mis à jour la réponse avec le nouveau lien.
OriginalL'auteur Donut
En supposant que vous êtes en utilisant un nom d'utilisateur et le mot de passe que des jetons d'authentification, vous pouvez stocker en toute sécurité les opérations suivantes pour s'assurer que les données ne peuvent pas être compromises.
En utilisant le programme, un attaquant ne peut pas utiliser rainbow tables contre vous et les mots de passe ne sont pas récupérables par (raisonnable) des moyens. (Qui est, aussi longtemps que votre agresseur n'est pas le gouvernement)
Même si l'attaquant a le sel et pommes de paires, il n'est pas possible d'utiliser des tables arc-en-parce que tous les hachages devra être calculé de toute façon, en utilisant le sel qu'ils ont eu, c'est une toute nouvelle attaque de force brute pour chaque utilisateur.
Même avec le code source et l'attaquant ne sera pas en mesure d'obtenir les mots de passe parce que la force/la sécurité est dans l'algorithme de hachage, pas votre code.
Combiner cela avec l'aide de bcrypt comme par Beignet de réponse et vous êtes vraiment tout à fait sûr. Qui est:
string) est identique ou différent pour tous les utilisateurs. Si elle est différente, alors nous avons besoin de la stocker dans la db?
Un autre sel pour chaque utilisateur est le meilleur.
OriginalL'auteur Matthew
Suivant les conseils de ici, pour encore plus de plaisir, vous pouvez modifier dynamiquement votre sel. Par exemple, l'utilisation de différents sels pour les noms d'utilisateur de longueur différente, l'utilisation de l'utilisateur de la date d'enregistrement comme le sel. De ce fait il que même si quelqu'un est à votre base de données, ils ne peuvent pas simplement de re-générer le hachage, ils ont de calculer une table de hachage pour chaque sel que vous avez utilisé.
tout le monde compte tenu de stocker les mots de passe dans une base de données devrait lire ce post de blog
OriginalL'auteur eykanal
Si vos utilisateurs sont sur internet, OpenId serait une de vos meilleures options. http://openid.net/
Si vos utilisateurs sur votre réseau, vous pouvez faire de la Sécurité Intégrée?
En d'autres mots.. ne pas stocker leurs mots de passe.
OriginalL'auteur Raj More
Généralement de "salé" mots de passe (comme avec bcrypt) signifie que le mot de passe est stockée, mais seulement quelque chose comme
Maintenant, si le kiddie a votre base de données (et bien sûr, le code - il est inutile de garder le code secret), il/elle peut seulement deviner les mots de passe, calculer le salé de hachage, et de les comparer. Si la fonction de hachage est cher (comme bcrypt est), que d'essayer de deviner est cher aussi.
OriginalL'auteur Mitro
C'est simple
Et personne ne sera en mesure de les inverser 🙂
Voir aussi: https://stackoverflow.com/questions/3897434/password-security-sha1-sha256-or-sha512
Ne l'empêchera pas de dictionnaire-attaques.
Le sel doit être connu, sinon les mots de passe ne peut pas être vérifiée. La force Brute est théoriquement possible, mais pas dans la pratique. @Le temps Machine: Comment ça? C'est ce que le sel est pour. Si elle est suffisamment longue et unique, aucun dictionnaire n'aurez.
dépend du mot de passe
Vous pourriez faire un dictionnaire de l'attaque contre le code PHP car il contient déjà le code nécessaire pour convertir le dictionnaire de mot de passe à un salée de hachage. En d'autres termes, si j'avais la base de données et du code PHP, je voudrais exécuter une attaque par dictionnaire sur la base de données à l'aide du code. Le code PHP serait d'utiliser le salé de hachage pour vérifier chaque mot de passe de la base de données.
OriginalL'auteur Bart van Heukelom