Die Verwendung von Https ist die richtige Antwort.
Ich werde eine Klarstellung über die Bedeutung der Berechnung eines Hashes auf der Server-Seite hinzufügen. Der Hash ist eine Einwegfunktion, die die Eingabe in den auf dem Server gespeicherten Schlüsselwert umwandelt. Wenn jemand den Server hackt und die gehashte Eingabe (Schlüsselwert) erhält, kann er daraus nicht den Eingabewert ableiten und sich als Sie ausgeben.
Wenn Sie den Schlüsselwert auf der Client-Seite berechnen und auf dem Server keine Einwegumwandlung durchgeführt wird, ist dies gleichbedeutend mit der Speicherung von Kennwörtern im Klartext. Jemand, dem es gelungen ist, eine Kopie des auf dem Server gespeicherten Schlüsselwerts zu erhalten, kann sich leicht als Sie ausgeben, indem er einfach den Schlüsselwert sendet.
Daher muss auf der Serverseite eine kryptografisch sichere Einwegfunktion (z. B. sha256) mit einem Salt/Zufallswert auf das übermittelte Passwort angewendet werden, um die Passwortdatenbank zu sichern.
Die Verschleierung des gesendeten Kennworts durch Hashing, zusätzlich zum Hashing auf der Serverseite, hilft nicht viel, wenn der gesendete Hash-Wert immer derselbe ist. Das Ausspähen von Daten, die über eine SSL-Verbindung gesendet werden, ist jedoch nicht trivial.
Das Hashing von Passwörtern auf der Client-Seite hat jedoch einen erheblichen Vorteil. Ein Brute-Force-Angriff auf den Server, bei dem versucht wird, das Passwort mit Hilfe eines gängigen Passwort-Wörterbuchs zu erraten, wäre aussichtslos, da das Hashing auf der Client-Seite das Passwort nach dem Zufallsprinzip generiert.
Wir können dem Hash ein Salz hinzufügen, um uns vor der Verwendung eines gehashten Passwort-Wörterbuchs zu schützen. Wenn der Benutzer seine Benutzerkennung eingegeben hat, fragen Sie den Server nach dem benutzerspezifischen Salt-Wert. Verwenden Sie dann den zurückgegebenen Salt- oder Hash-Seed-Wert, um das gehashte Passwort auf der Client-Seite zu generieren.
Das Erraten von Passwörtern mit roher Gewalt kann auf der Serverseite verhindert werden, indem das Zeitintervall zwischen den Wiederholungsversuchen verlängert wird. Dies funktioniert jedoch im Allgemeinen nur für eine bestimmte Verbindung. Der Angreifer kann die Verbindung nach jeweils zwei Versuchen wiederherstellen. Um diese Art von Angriffen zu erkennen, ist es erforderlich, die IP-Adressen zu verfolgen.