La meilleure façon de stocker le mot de passe dans la base de données [fermé]

je travaille sur un projet qui doit avoir une authentification (nom d'utilisateur et mot de passe)

il se connecte aussi à une base de données, donc j'ai pensé que je pourrais y stocker le nom d'utilisateur et le mot de passe. Cependant, il ne semble pas être une bonne idée d'avoir des mots de passe comme juste un champ de texte dans une table assise sur la base de données.

j'utilise C# et je me connecte à un serveur express 2008. Quelqu'un peut-il suggérer (avec le plus d'exemples possibles) quelle est la meilleure façon de stocker ce type de données?

P. S je suis ouvert à l'idée que cette info ne pas être stockées dans la base de données si une bonne raison peut être fourni

402
demandé sur JDoe 2009-06-28 05:50:50

8 réponses

vous avez raison de dire que stocker le mot de passe dans un champ en clair est une idée horrible . Cependant, en ce qui concerne l'emplacement, , pour la plupart des cas que vous allez rencontrer (et je ne peux honnêtement pas penser à des contre-exemples) stocker la représentation d'un mot de passe dans la base de données est la bonne chose à faire. Par représentation je veux dire que vous voulez hachez le mot de passe en utilisant un sel (qui devrait être différent pour chaque utilisateur) et un algorithme 1-way sécurisé et de stocker que , en rejetant le mot de passe original. Ensuite, lorsque vous voulez vérifier un mot de passe, vous hachez la valeur (en utilisant le même algorithme de hachage et sel) et la comparez à la valeur hachée dans la base de données.

donc, bien que ce soit une bonne chose que vous y pensiez et que c'est une bonne question, c'est en fait une copie de ces questions (au moins):

pour clarifier un peu plus sur le salting bit, le danger de simplement Hasher un mot de passe et de le stocker est que si un intrus obtient une prise de votre base de données, ils peuvent toujours utiliser ce qui est connu comme tables arc-en-ciel pour être en mesure de "décrypter" le mot de passe (au moins ceux qui apparaissent dans la table arc-en-ciel). Pour contourner cela, les développeurs ajoutent un sel aux mots de passe qui, lorsqu'il est correctement fait, rend les attaques arc-en-ciel tout simplement impossible à faire. Notez qu'une idée fausse commune est à il suffit d'ajouter la même chaîne unique et longue à tous les mots de passe; bien que ce ne soit pas horrible , il est préférable d'ajouter des sels uniques à chaque mot de passe. pour en savoir plus.

356
répondu Paolo Bergantino 2017-05-23 12:18:16

arrière-plan Vous n'avez jamais ... vraiment. .. besoin de connaître le mot de passe utilisateur. Vous voulez juste vérifier qu'un utilisateur entrant connaît le mot de passe d'un compte.

Hachage: Stockez les mots de passe d'utilisateur hachés (cryptage à Sens Unique) via une forte fonction de hachage. Une recherche pour "C # encrypt passwords" donne une charge d'exemples.

voir le en ligne sha1 créateur de hash pour une idée de ce que la fonction de hachage produit (mais n'utilisez pas SHA1 comme une fonction de hachage, utilisez quelque chose de plus fort comme SHA256).

maintenant, un mot de passe hashé signifie que vous (et les Voleurs de bases de données) ne devriez pas être en mesure d'inverser ce hachage de nouveau dans le mot de passe original.

comment l'utiliser: Mais, dites-vous, comment puis-je utiliser ce mot de passe masqué stocké dans la base de données?

quand l'utilisateur se connecte, ils vous donneront le nom d'utilisateur et le mot de passe (dans le texte original de la) Il vous suffit d'utiliser le même code de hachage pour hachurer le mot de passe saisi pour obtenir la version stockée.

ainsi, comparez les deux mots de passe hachés (hachage de base de données pour le nom d'utilisateur et le mot de passe dactylographié et hachée). Vous pouvez dire si" ce qu'ils ont tapé "correspond à" ce que l'utilisateur original a entré pour leur mot de passe " en comparant leurs hachures.

crédit supplémentaire:

Question: si j'avais votre base de données, ne pourrais-je pas juste prendre un cracker comme John L'Éventreur et commencer à faire des hashs jusqu'à ce que je trouve des correspondances avec vos mots de passe stockés et hashés? (puisque les utilisateurs choisissent court, des mots de dictionnaire de toute façon ... il devrait être facile)

Réponse: Oui ... oui ils le peuvent.

donc, vous devriez "saler" vos mots de passe. Voir le article de Wikipedia sur le sel

voir "hachage de données avec le sel" C# exemple

44
répondu joej 2016-03-30 18:13:40

comme un hash salé durci à la clé, en utilisant un algorithme sécurisé tel que sha-512.

31
répondu nilamo 2009-06-28 01:59:46

la meilleure pratique en matière de sécurité n'est pas de stocker le mot de passe (même pas crypté), mais de stocker le hash salé (avec un sel unique par mot de passe) du mot de passe crypté.

de cette façon, il est (pratiquement) impossible de récupérer un mot de passe en clair.

26
répondu Mitch Wheat 2015-05-24 09:56:11

je recommande vivement de lire les articles ça suffit avec les tables arc-en-ciel: ce que vous devez savoir sur les schémas de mots de passe sécurisés [lien mort, copie à L'Archive Internet ] et Comment stocker en toute sécurité un mot de passe .

beaucoup de codeurs, moi-même inclus, pensent qu'ils comprennent la sécurité et le hachage. Malheureusement, la plupart d'entre nous ne le font pas.

10
répondu zebrabox 2014-11-12 09:19:44

je peux être légèrement hors-sujet car vous avez mentionné la nécessité d'un nom d'utilisateur et mot de passe, et ma compréhension de la question Est avouée pas le meilleur, mais est OpenID quelque chose vaut la peine d'envisager?

si vous utilisez OpenID alors vous ne finissez pas par stocker des informations d'identification du tout si je comprends la technologie correctement et les utilisateurs peuvent utiliser des informations d'identification qu'ils ont déjà, en évitant la nécessité de créer une nouvelle identité qui est spécifique à votre application.

il peut ne pas être approprié si la demande en question est purement pour un usage interne bien que

RPX fournit un moyen facile d'intégrer le support OpenID dans une application.

6
répondu Crippledsmurf 2009-06-28 03:10:43

dans votre scénario, vous pouvez jeter un oeil à asp.net membre, il est de bonne pratique de stocker le mot de passe de l'utilisateur comme chaîne hachée dans la base de données. vous pouvez authentifier l'utilisateur en comparant le mot de passe entrant hashé avec celui stocké dans la base de données.

tout a été construit à cet effet, Vérifiez asp.net membres

3
répondu Ray Lu 2009-06-28 01:56:31

je voudrais MD5/SHA1 le mot de passe si vous n'avez pas besoin d'être en mesure d'inverser le hachage. Lorsque les utilisateurs se connectent, vous pouvez simplement crypter le mot de passe donné et le comparer au hachage. Les collisions de hachage sont presque impossibles dans ce cas, à moins que quelqu'un accède à la base de données et voit un hachage ils ont déjà une collision pour.

2
répondu waiwai933 2009-06-28 01:55:50