Hash und Überprüfung von Passwörtern für die Anmeldung von Web-Benutzern

Automatisch übersetzt von Deepl

Sicherheit wird ein immer wichtigeres Thema, da Geschäftsanwendungen immer häufiger über das Internet zugänglich und damit anfälliger für Bedrohungen sind. Da 4D dem Thema Sicherheit große Aufmerksamkeit schenkt, bieten wir Ihnen in 4D v16 R5 eine Reihe von Sicherheitsverbesserungen, eine davon betrifft den Passwortschutz für Webbenutzer durch Passwort-Hashing.

Übrigens, wenn Sie mehr darüber erfahren möchten, wie 4D Ihnen beim Schutz Ihrer Daten und bei der Sicherheit im Allgemeinen hilft, empfehle ich Ihnen einen Blick auf diesen Blogbeitrag zu werfen.

Warum sollten Passwörter gehasht werden?

Nehmen wir ein konkretes Beispiel: Sie haben eine Geschäftsanwendung mit Benutzern, die sich anmelden können, indem sie ihren Namen und ihr Passwort in einen Dialog eingeben. Nach der Anmeldung erhalten die Benutzer „zusätzliche Rechte“, z. B. Lese- und Schreibrechte in anderen Tabellen oder Feldern (z. B. kann die Personalabteilung auf die Gehaltstabelle der Mitarbeiter zugreifen, nicht aber die Mitarbeiter selbst).

Der Server muss dann „etwas“ speichern, das zur Überprüfung der Benutzerkennwörter verwendet werden kann. Das einfachste „Etwas“ sind die Passwörter selbst. Jedes ungesicherte Kennwort, das in Ihrer Datenbank gespeichert ist, könnte gestohlen und verwendet werden, um Ihre Anwendung und Ihre Daten zu gefährden. Wenn Sie die Kennwörter Ihrer Benutzer vor dem Speichern in Ihrer Datenbank hacken, kann das ursprüngliche Kennwort nicht gefunden oder entschlüsselt werden. Sie können aber immer noch den Hash mit dem Originalkennwort vergleichen, um die Gültigkeit zu überprüfen.

Hash oder Verschlüsselung?

Zunächst einmal ist zu beachten, dass viele Leute von verschlüsselten Kennwörtern sprechen, in Wirklichkeit aber gehashte Kennwörter meinen.

Bei der Verschlüsselung wird ein Algorithmus verwendet, um Daten zu verschlüsseln , die mit einem Schlüssel entschlüsselt werden können, um die ursprünglichen Daten wiederherzustellen. Beim Hashing gibt es nach der Verschlüsselung der Daten keine Möglichkeit mehr, die Originaldaten wiederherzustellen. Daher sollten Kennwörter gehasht und nicht verschlüsselt werden.

Eine Folge des Passwort-Hashings ist, dass Sie, da Sie die Passwörter selbst nicht speichern (sondern nur einen Teil der Daten, der ausreicht, um ein Passwort zu überprüfen, ohne es wiederherstellen zu können), Benutzern, die ihre Passwörter vergessen haben, diese nicht zurücksenden können. Stattdessen müssen Sie ein neues Zufallspasswort für sie wählen oder sie ein neues Passwort wählen lassen.

Welcher Algorithmus für das Hashing?

Algorithmen wie MD5 oder SHA sind zwar sehr schnell, aber anfällig für Brute-Force-Angriffe. Der bcrypt-Algorithmus ist von Haus aus langsam und eignet sich daher perfekt für das Hashing von Kennwörtern. Für weitere Informationen empfehle ich Ihnen den Artikel „Wie man ein Passwort sicher speichert“ von Coda Hale zu lesen.

Befehle zum Hashing von Kennwörtern

Es wurden zwei neue Befehle erstellt, um ein gehashtes Kennwort zu erzeugen und zu überprüfen. Diese Befehle basieren auf dem bcrypt-Algorithmus.

  • Ein neuer Benutzer erstellt sein Konto mit dem Kennwort:„meinKennwort„. Ich generiere das Hash-Passwort mit dem Befehl new Generate password hash Befehl, dann habe ich das Hash-Passwort in der Datenbank gespeichert.

$varHash:=Generate password hash("meinPasswort")
[Benutzer]Login:=$varLogin
[Benutzer]HashPasswort:=$varHash

SAVE RECORD ([Benutzer])

  • Wenn mein Benutzer versucht, eine Verbindung herzustellen, gibt er sein Passwort ein. Dann prüfe ich die Gültigkeit zwischen dem vom Benutzer eingegebenen Passwort und dem in der Datenbank gespeicherten Hash-Passwort mit dem new Verify password hash Befehl.

C_TEXT($varLogin;$varPassword) // information entered by user
QUERY ([Benutzer];[Benutzer]Login;=;$varLogin)
If (Records in selection([Benutzer])=1)

// Compare the password to the hash password
If (Verify password hash($varPassword;[Benutzer]HashPasswort))
SendToUser("Sie sind verbunden. Willkommen "+$varLogin+".")
Else
SendToUser("Sie haben ein falsches Passwort eingegeben.")
End if

Else
SendToUser("Sie haben ein falsches Login eingegeben.")
End if

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.