Es gibt eine Menge Dummheiten, wenn es um Passwörter auf Websites geht.
- Einige haben rein technische Gründe (gültig oder nicht, das ist eine andere Frage, aber fast alle sind es nicht):
Ihr Passwort muss aus vier Zeichen bestehen und nur Ziffern enthalten.
(Indem Sie ein Kennwort auf den Bereich 0001 .. 9999 beschränken, können Sie es einfach als Zahl im Klartext in der Datenbank speichern.)
- Andere erklären sich aus dem Irrtum, dass sie Passwörter sicherer machen :
Ihr Passwort muss mit einem Großbuchstaben beginnen und mit einer Ziffer enden.
(Durch diese die Entwickler tun, oder der Manager davon ausgegangen, dass dies tatsächlich die Benutzer zwingen , ein sicheres Passwort zu wählen, während die Regel als „Ihr Passwort min enthalten muss. 6 Zeichen mit mindestens einem Großbuchstaben, Kleinbuchstaben und ein Ziffer "wird es auf magische Weise nicht schaffen)
- Andere werden schließlich durch die Tatsache erklärt, dass Passwörter im Klartext gespeichert sind und es einige Unklarheiten darüber gibt, wie sie gespeichert, verarbeitet oder abgerufen werden, und es keine Zeit gibt, sie nach dem Unit-Test zu testen.
Ihr Passwort enthält ein ungültiges Zeichen é
.
oder,
Ihr Passwort y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
enthält einige ungültige Zeichen. Verwenden Sie nur lateinische Buchstaben und Ziffern.
oder,
Ihr Passwort darf keine Leerzeichen enthalten.
In allen drei Fällen hat der Entwickler lediglich sichergestellt, dass solche Passwörter korrekt gespeichert werden.
Was passiert im ersten Fall, wenn é
es %C3%A9
beim Senden in umgewandelt wird? Oder was ist, wenn die Datenbank é
falsch gespeichert wird ?
Was passiert im zweiten Fall, wenn PHP (warum PHP?) Nicht mit Unicode umgehen kann und bei einem Passwort wie diesem etwas Schreckliches tut? Was ist, wenn der <
Charakter Ärger macht? Was ist, wenn ein &
Zeichen als Trennzeichen in einer URL interpretiert wird (unter der Annahme, dass das Kennwort aus irgendeinem Grund über GET anstelle von POST gesendet wird)? Was ist, wenn '
es von der Datenbank interpretiert wird, weil wir, raten Sie mal, keine Ahnung haben, was SQL Injection ist und wie man es vermeidet? Oder was ist, wenn '
sich in verwandelt \'
?
Was passiert im dritten Fall, wenn PHP (erneut?) In einigen Fällen Leerzeichen und in anderen nicht schneidet? Was ist, wenn die Administratoren (die überraschenderweise im Klartext Zugriff auf Benutzerpasswörter haben) verloren gehen, weil sie nur ein Leerzeichen sehen, während der Benutzer drei aufeinanderfolgende Leerzeichen gesetzt hat ?
In allen drei Fällen lassen sich diese Unklarheiten durch Tests , insbesondere Unit-Tests, leicht lösen . Bei einer großen Anzahl von Projekten gibt es jedoch überhaupt keine Tests und keine Zeit zum Testen (aber immer noch viel Zeit zum späteren Debuggen).
Dies bedeutet, ob der Entwickler versucht, über die möglichen Konsequenzen nachzudenken , Leerzeichen oder Unicode-Zeichen oder nur beliebige Zeichen außerhalb von ASCII 48..57 ∪ 65..90 ∪ 97..122 (Ziffern, Kleinbuchstaben, Großbuchstaben) zuzulassen. , der einfachste Weg, bei der Prüfung nicht möglich ist, ist nur sie zu verbieten .
Meiner Meinung nach ist dies der einzige Grund, Leerzeichen zu verbieten. Yannis Rizos gab einen weiteren Grund im Zusammenhang mit UX an. Obwohl dies theoretisch ein plausibler Grund ist, funktioniert es in der Praxis überhaupt nicht: Websites, die von Leuten erstellt wurden, die sich wirklich für UX interessieren, reparieren keine dummen Passwortregeln. Stattdessen werden Websites, auf denen Leerzeichen eigentlich verboten sind, größtenteils von Personen erstellt, die noch nie von UX gehört haben . Dies gilt insbesondere, da das Verbieten von Zeichen aus UX-Sicht sehr ärgerlich ist, da alle kennwortbezogenen Einschränkungen, einschließlich der nützlichen, die Mindestanzahl von Zeichen sind.