Nicht ohne SSL
Dies ist nicht sicher, wenn das Passwort im Klartext über das Netzwerk gesendet wird. Das Hashing des Kennworts auf der Serverseite ist auch nicht sicher, wenn das Kennwort im Klartext über das Netzwerk gesendet wird.
Da das HTML- <input type="password"/>
Tag seinen Inhalt im Klartext sendet, ist dies ein Problem, unabhängig davon, wie Sie das Kennwort auf dem Server speichern, es sei denn, Ihre Website verwendet SSL zur Übermittlung des Kennworts.
(Die HTTP-Authentifizierung, bei der ein Dialogfeld im Browser angezeigt wird, in dem Sie nach einem Kennwort gefragt werden, kann je nach den vom Server und vom Browser gemeinsam verwendeten Authentifizierungsmechanismen als Klartext angezeigt werden. Auf diese Weise kann dies möglicherweise vermieden werden, ohne die Option zu verwenden SSL.)
Nicht, wenn die Site-Administratoren verdächtig sind
Angenommen, Sie verwenden HTTPS für die Ausführung der Website. Dies kann sicher sein, wenn Sie Ihren Site-Administratoren (die Klartext-Kennwörter lesen können) und anderen Personen, die Zugriff auf den Computer haben, vertrauen, um sich ordnungsgemäß zu verhalten. Nun mag es offensichtlich sein, dass sie mit Ihrer Website alles tun können, was sie wollen (da sie sie verwalten), aber wenn sie das Passwort lesen können, können sie möglicherweise auch die gestohlenen Login / Passwort-Paare auf den Websites anderer Personen verwenden.
Eine Möglichkeit, um Passwörter vor dem Administrator zu schützen
Eine sichere Methode zum Speichern und Überprüfen von Passwörtern ist folgende:
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
Versuchen Sie, für die Hash-Funktion etwas Starkes und etwas zu verwenden, das noch keine guten Regenbogentabellen in freier Wildbahn hat. Sie können die Länge des Salzes bei Bedarf ändern, indem Sie an Regenbogentischen arbeiten.
Abhängig von der Umgebung, in der Sie sich befinden, der Variabilität Ihrer Netzwerklatenz und der Frage, ob Benutzernamen öffentlich bekannt sein sollen, möchten Sie möglicherweise einen anderen Codepfad berechnen, hash('0000'+entered_password)
wenn der Benutzer nicht vorhanden ist, um Angreifer daran zu hindern Feststellen, welche Benutzernamen gültig sind, basierend auf der Zeit, die benötigt wird. Feststellen, dass das Kennwort falsch ist.