Si je crée une connexion pour une application qui présente un risque de sécurité moyen à faible (en d'autres termes, ce n'est pas une application bancaire ou quoi que ce soit), est-il acceptable pour moi de vérifier un mot de passe entré par l'utilisateur en disant simplement quelque chose comme:
if(enteredPassword == verifiedPassword)
SendToRestrictedArea();
else
DisplayPasswordUnknownMessage();
Il semble facile d'être efficace, mais cela ne me dérangerait certainement pas si c'était tout ce qu'il fallait. Une simple vérification du combo nom d'utilisateur / mot de passe est-elle suffisante?
Mise à jour: Le projet particulier se trouve être un service Web, la vérification est entièrement côté serveur et n'est pas open-source. Le domaine change-t-il la façon dont vous traiteriez cela?
security
passwords
validation
Morgan Herlocker
la source
la source
Réponses:
Pas sans SSL
Ce n'est pas sécurisé si le mot de passe est envoyé sur le réseau en texte brut. Le hachage du mot de passe côté serveur n'est pas non plus sécurisé si le mot de passe est envoyé sur le réseau en texte brut.
Étant donné que la
<input type="password"/>
balise HTML envoie son contenu en texte brut, ce sera un problème quelle que soit la façon dont vous stockez le mot de passe sur le serveur, sauf si votre site Web utilise SSL pour transmettre le mot de passe.(L'authentification HTTP, qui fait apparaître une boîte de dialogue dans le navigateur demandant un mot de passe, peut être en texte clair ou non, selon les mécanismes d'authentification communs au serveur et au navigateur. Cela pourrait donc être un moyen d'éviter cela sans utiliser SSL.)
Pas si les administrateurs du site sont suspects
Maintenant, en supposant que vous utilisez HTTPS pour faire le site Web, cela pourrait être sécurisé si vous faites confiance aux administrateurs de votre site (qui peuvent lire les mots de passe en texte brut) et aux autres personnes qui ont accès à la machine pour se comporter correctement. Maintenant, il peut être évident qu'ils peuvent faire tout ce qu'ils veulent avec votre site Web (car ils l'administrent), mais s'ils peuvent lire le mot de passe, ils peuvent également utiliser les paires identifiant / mot de passe volées sur les sites d'autres personnes.
Un moyen qui protège les mots de passe de l'administrateur
Un moyen sûr de stocker et de vérifier les mots de passe est le suivant:
Pour la fonction de hachage, essayez d'utiliser quelque chose de fort et quelque chose qui n'a pas encore de bonnes tables arc-en-ciel à l'état sauvage. Vous pouvez modifier la longueur du sel si nécessaire autour des tables arc-en-ciel.
Selon l'environnement dans lequel vous vous trouvez, la variabilité de la latence de votre réseau et si les noms d'utilisateurs sont censés être connus du public, vous souhaiterez peut-être calculer un autre chemin de code
hash('0000'+entered_password)
si l'utilisateur n'existe pas, afin d'empêcher les attaquants de déterminer quels noms d'utilisateur sont valides en fonction du temps qu'il faut déterminer que le mot de passe est incorrect.la source
http://
connexion régulière ... c'est frustrant: /encrypt(entered_password, public_key)
sur le client et envoyez ce résultat au serveur, qui fonctionnedoes_password_match?(user, decrypt(encrypted_password, private_key))
?does_password_match(user, salt, decrypt(encrypted, key))
, avec le sel selon l'utilisateur. Comme je l'ai dit, le problème évident est le manque de protection de l'homme au milieu.Cela suggérerait que vous gardiez les mots de passe en texte ouvert, ce qui est non-non, même dans les scénarios de faible sécurité.
Vous devriez plutôt avoir:
Vous pouvez utiliser un hachage simple comme par exemple MD5
la source
Je suis d'accord avec ceux qui suggèrent le hachage, mais il y a aussi une roue que vous réinventez ici. Selon la plate-forme, vous pouvez probablement trouver un outil de gestion des rôles / utilisateurs qui couvre toutes les tâches de gestion des utilisateurs en toute sécurité et sans nécessiter trop d'intervention de votre part.
la source
La sécurité est un sujet très délicat, en particulier parce qu'il doit y avoir un équilibre entre incommoder vos utilisateurs et s'assurer que leurs informations sont en sécurité. En règle générale, la formule du niveau de sécurité dont vous avez besoin est fonction de l'importance des données. En bref:
Un malentendu courant au sujet des gens qui font de mauvaises choses est ce qu'ils recherchent. La plupart d'entre eux cherchent à détruire la confiance . Vous devez toujours faire tout votre possible pour protéger la confiance de vos utilisateurs. Cela consiste en partie à faire preuve de diligence raisonnable pour vous assurer que leur identité est en sécurité. Ils se soucient peut-être moins des données qu'ils stockent, mais ils se soucient de leur identité, même au seuil de sécurité le plus bas.
Il existe un certain nombre d'options à faible coût (à mettre en œuvre et à impact pour l'utilisateur) disponibles. L'un d'eux est le hachage du mot de passe au strict minimum. Tout service qui stocke quelque chose d'aussi sensible qu'un mot de passe en texte brut mérite l'embarras d'être piraté.
Principes généraux de protection par mot de passe
Puisque vous utiliseriez SSL pour l'authentification, vous voulez au moins crypter toutes les pages qui traitent également du compte de l'utilisateur. Cela permet de protéger autant que possible l'identité d'un utilisateur.
Remarque sur la gestion des mots de passe : les utilisateurs oublient parfois leur mot de passe. La pire chose que vous puissiez faire est de leur envoyer leur mot de passe par e-mail. Si vous appliquez les principes décrits ci-dessus, vous ne pourrez pas le faire de toute façon. Il est préférable de fournir un moyen de réinitialiser leur mot de passe en utilisant un lien envoyé à leur adresse e-mail enregistrée. Ce lien de réinitialisation aura un code d'utilisation unique pour garantir que la personne accédant à la page est bien elle.
la source
C'est bien, sauf si le mot de passe est utilisé pour autre chose. Il y a toujours un risque que l'utilisateur décide qu'il peut réutiliser le mot de passe, donc ce serait encore mieux avec:
Si c'est pour vous ou pour quelqu'un qui sait que le mot de passe est stocké en texte brut, alors ça va.
la source
if (hash (enteredPassword + salt) == hashOfValidSaltedPassword)
- et notez que+
c'est probablement une concaténation, pas un ajout. Cela entrave vraiment l'utilisation des tables arc-en-ciel, qui sont des tables de hachage de mots de passe probables.Le code source est-il disponible? Même si ce n'est pas le cas, je suis sûr que le mot de passe pourrait être trouvé dans les instructions de la machine au cas où le binaire serait disponible. Je recommanderais de faire une somme de contrôle et de comparer cela à la place.
Ne négligez jamais la sécurité même si elle n'est pas très importante à votre avis.
la source
Absolument pas. Lisez -le , il décrit comment les pirates ont piraté un site Web de sécurité. Vous envisagez de vous avoir comme le maillon le plus faible de la chaîne.
la source
Il a été noté dans quelques réponses que vous ne devez pas stocker le mot de passe lui-même, mais un hachage - et vous devez utiliser SSL.
Vous pouvez dire, quel est le gros problème? Si ma demande est piratée, cela ne pose pas grand problème. Eh bien, c'est un modèle assez courant pour les utilisateurs de réutiliser le même mot de passe sur tous les sites. Si un pirate informatique piratait votre site et avait accès aux mots de passe des utilisateurs, le pirate informatique pourrait se faire passer pour un grand nombre de ces utilisateurs sur d'autres sites plus importants pour ces utilisateurs. Le piratage de votre site pourrait donc être la première étape pour un pirate pour accéder aux informations bancaires des utilisateurs.
Et le hachage du mot de passe ne suffit pas. Vous devez le hacher avec un sel. Les pirates ont des tables de recherche de hachage inversées, donc pour un hachage donné, ils peuvent trouver un mot de passe correspondant.
Si vous choisissez de ne pas implémenter ces fonctionnalités, vous devez informer les utilisateurs de ce manque de sécurité, en les encourageant à ne pas utiliser le même mot de passe qu'ils utilisent ailleurs.
la source
Tant que c'est côté serveur .. Alors oui.
Si vous voulez un peu plus de sécurité, optez pour https et chiffrez \ hachage le mot de passe dans la base de données.
la source