Ich arbeite derzeit an einem PHP OpenID-Anbieter, der über HTTPS (daher SSL-verschlüsselt) funktioniert.
Ist es falsch für mich, das Passwort als Klartext zu übermitteln? HTTPS kann theoretisch nicht abgefangen werden, daher sehe ich nichts falsches. Oder ist das auf einer bestimmten Ebene unsicher und ich sehe das nicht?
https
password-protection
WhyNotHugo
quelle
quelle
Sie müssen weiterhin sicherstellen, dass Sie es per POST-Anfrage senden, nicht per GET. Wenn Sie es per GET-Anfrage senden, kann es im Klartext in den Browserverlaufsprotokollen des Benutzers oder in den Zugriffsprotokollen des Webservers gespeichert werden.
quelle
Wenn HTTP deaktiviert ist und Sie nur HTTPS verwenden, übertragen Sie das Kennwort ohnehin nicht wirklich als Klartext.
quelle
Hash-Client-Seite. Warum? Lassen Sie mich Ihnen von einem kleinen Experiment erzählen. Gehen Sie in der Cafeteria des Unternehmens zum Computer. Öffnen Sie den Browser für die Anmeldeseite der Unternehmenswebsite (https). Drücken Sie F12, klicken Sie auf die Registerkarte "Netzwerk", deaktivieren Sie "Persist Log", minimieren Sie die Konsole, lassen Sie die Webseite jedoch für die Anmeldeseite geöffnet. Setzen Sie sich und essen Sie zu Mittag. Beobachten Sie, wie sich ein Mitarbeiter nach der Anmeldung auf der Unternehmenswebsite anmeldet und sich als guter kleiner Mitarbeiter abmeldet, wenn er fertig ist. Beenden Sie das Mittagessen, setzen Sie sich an den Computer, rufen Sie die Registerkarte "Netzwerk" auf und sehen Sie jeden einzelnen Benutzernamen und jedes Kennwort im Klartext in der Form "bodys".
Keine speziellen Tools, keine speziellen Kenntnisse, keine ausgefallene Hacking-Hardware, keine Keylogger, nur gute alte F12.
Aber hey, denken Sie weiter, alles was Sie brauchen ist SSL. Die Bösen werden dich dafür lieben.
quelle
Machen wir uns einige Notizen zu früheren Antworten.
Erstens ist es wahrscheinlich nicht die beste Idee, Hash-Algorithmen clientseitig zu verwenden. Wenn Ihr Kennwort auf der Serverseite gesalzen ist, können Sie keine Hashes vergleichen (zumindest nicht, wenn Sie den Client-Hash nicht in der Datenbank in einer der Hash-Ebenen des Kennworts speichern, die identisch sind oder schlechter). Und Sie möchten den von der Datenbank auf der Clientseite verwendeten Hashing-Algorithmus nicht implementieren, es wäre dumm.
Zweitens ist es auch nicht ideal, kryptografische Schlüssel auszutauschen. Das MITM könnte theoretisch (wenn man bedenkt, dass auf dem Client ein Stammzertifikat installiert ist) die kryptografischen Schlüssel ändern und mit seinen eigenen Schlüsseln ändern:
Ursprüngliche Verbindung (ohne Berücksichtigung von tls) von einem theoretischen Server, der Schlüssel austauscht:
Öffentliche Schlüssel für Clientanforderung> Server enthält die privaten Schlüssel, generiert öffentliche Schlüssel für Client> Server sendet öffentliche Schlüssel an Client
Nun, in einem theoretischen MITM-Atrack:
Öffentliche Schlüssel für Clientanfragen > MITM generiert gefälschte private Schlüssel > Server hält die privaten Schlüssel, generiert öffentliche Schlüssel für den Client> MITM empfängt die öffentlichen Schlüssel vom ursprünglichen Server. Jetzt können wir unsere gefälschten öffentlichen Schlüssel an den Client senden Wenn eine Anfrage vom Client kommt, entschlüsseln wir die Clientdaten mit den gefälschten Schlüsseln, ändern die Nutzdaten (oder lesen sie) und verschlüsseln sie mit den ursprünglichen öffentlichen Schlüsseln. > MITM sendet gefälschte öffentliche Schlüssel an den Client.
Dies ist der Grund dafür, dass Sie ein vertrauenswürdiges CA-Zertifikat in TLS haben. Auf diese Weise erhalten Sie eine Warnung vom Browser, wenn das Zertifikat nicht gültig ist.
Als Antwort auf das OP: Meiner bescheidenen Meinung nach können Sie das nicht tun, weil früher oder später jemand einen Benutzer von Ihrem Dienst aus angreifen möchte und versucht, Ihr Protokoll zu brechen.
Sie können jedoch 2FA implementieren, um zu verhindern, dass Benutzer jemals versuchen, sich mit demselben Kennwort anzumelden. Vorsicht vor Wiederholungsangriffen.
Ich bin nicht besonders gut mit Kryptografie. Bitte korrigieren Sie mich, wenn ich falsch liege.
quelle
Die anderen Poster sind korrekt. Jetzt, da Sie SSL verwenden, um die Übertragung des Passworts zu verschlüsseln , stellen Sie sicher, dass Sie es mit einem guten Algorithmus und Salt hashen, damit es auch im Ruhezustand geschützt ist ...
quelle