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:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
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.