Der beste Gedanke ist, das Rad nicht neu zu erfinden. Ich verstehe jedoch, dass es in der PHP-Welt schwierig sein kann, eine qualitativ hochwertige Komponente zu finden, die dies bereits tut (auch wenn ich mir ziemlich sicher bin, dass die Frameworks solche Dinge implementieren und ihre Implementierungen bereits getestet, solide, codeüberprüft usw. sind. )
Wenn Sie aus bestimmten Gründen kein Framework verwenden können, finden Sie hier einige Vorschläge:
Verwenden Sie PBKDF2 oder Bcrypt, wenn Sie können . Dafür ist es getan.
Begründung: Beide Algorithmen können den Hashing-Prozess beliebig langsam machen. Genau das möchten Sie beim Hashing von Passwörtern (schnellere Alternativen bedeuten einfachere Brute Force). Im Idealfall sollten Sie die Parameter so anpassen, dass der Prozess auf derselben Hardware mit der Zeit immer langsamer wird, während neue, schnellere Hardware freigegeben wird.
Wenn dies nicht möglich ist, verwenden Sie mindestens MD5 / SHA1 nicht. Noch nie. Vergiss es . Verwenden Sie stattdessen beispielsweise SHA512. Verwenden Sie auch Salz.
Begründung: MD5 und SHA1 sind zu schnell. Wenn der Angreifer Zugriff auf Ihre Datenbank hat, die die Hashes enthält, und über einen (nicht einmal besonders leistungsstarken) Computer verfügt, ist es schnell und einfach, ein Passwort zu erzwingen. Wenn keine Salze vorhanden sind, erhöht sich die Wahrscheinlichkeit, dass der Angreifer das tatsächliche Kennwort findet (was zusätzlichen Schaden verursachen kann, wenn das Kennwort an einer anderen Stelle erneut verwendet wird).
Verwenden Sie in PHP 5.5.0 und höher password_hash
und password_verify
.
Begründung: Das Aufrufen einer vom Framework bereitgestellten Funktion ist einfach, sodass das Risiko eines Fehlers verringert wird. Bei diesen beiden Funktionen müssen Sie nicht an verschiedene Parameter wie den Hash denken. Die erste Funktion gibt eine einzelne Zeichenfolge zurück, die dann in der Datenbank gespeichert werden kann. Die zweite Funktion verwendet diese Zeichenfolge zur Kennwortüberprüfung.
Schützen Sie sich vor Gewalt . Wenn der Benutzer ein falsches Kennwort eingibt, obwohl er vor 0,01 Sekunden bereits ein anderes falsches Kennwort eingegeben hat, ist dies ein guter Grund, das Kennwort zu blockieren. Während die Menschen schnell eingeben können, können sie wahrscheinlich nicht sein , dass schnell.
Ein weiterer Schutz wäre die Festlegung einer stündlichen Ausfallgrenze. Wenn der Benutzer in einer Stunde 3600 falsche Kennwörter eingegeben hat, 1 Kennwort pro Sekunde, ist es schwer zu glauben, dass dies ein legitimer Benutzer ist.
Begründung: Wenn Ihre Passwörter unsicher gehasht werden, kann Brute Force sehr effektiv sein. Wenn Kennwörter sicher gespeichert werden, verschwendet Brute Force immer noch die Ressourcen und die Netzwerkbandbreite Ihres Servers und führt zu einer geringeren Leistung für legitime Benutzer. Die Brute-Force-Erkennung ist nicht einfach zu entwickeln und in Ordnung zu bringen, aber für jedes kleine System lohnt es sich auf jeden Fall.
Bitten Sie Ihre Benutzer nicht, ihre Passwörter alle vier Wochen zu ändern. Dies ist äußerst ärgerlich und verringert die Sicherheit, da die Post-It-Sicherheit gefördert wird.
Begründung: Die Idee, dass das System durch das Erzwingen eines Kennwortwechsels alle n Wochen vor brutaler Gewalt geschützt wird, ist falsch. Brute-Force-Angriffe sind in der Regel innerhalb von Sekunden, Minuten, Stunden oder Tagen erfolgreich, sodass monatliche Kennwortänderungen keine Rolle mehr spielen. Andererseits sind Benutzer schlecht darin, sich Kennwörter zu merken. Wenn sie diese ändern müssen, versuchen sie entweder, sehr einfache Passwörter zu verwenden, oder notieren sich ihre Passwörter einfach auf den Post-its.
Prüfe alles, jedes Mal. Speichern Sie Anmeldungen, aber niemals Kennwörter im Überwachungsprotokoll. Stellen Sie sicher, dass das Überwachungsprotokoll nicht geändert werden kann (dh Sie können am Ende Daten hinzufügen, die vorhandenen Daten jedoch nicht ändern). Stellen Sie sicher, dass die Überwachungsprotokolle regelmäßig gesichert werden. Im Idealfall sollten Protokolle auf einem dedizierten Server mit sehr restriktiven Zugriffen gespeichert werden: Wenn ein anderer Server gehackt wird, kann der Angreifer die Protokolle nicht löschen, um seine Anwesenheit (und den Pfad, der während des Angriffs verwendet wurde) zu verbergen.
Erinnern Sie sich nicht an die Benutzeranmeldeinformationen in Cookies, es sei denn, der Benutzer fragt danach (das Kontrollkästchen "Erinnere dich an mich" muss standardmäßig deaktiviert sein, um menschliches Versagen zu vermeiden).