Ci sono una quantità enorme di stupidità quando si tratta di password nei siti web.
- Alcuni hanno solo motivi tecnici (valido o no, questa è un'altra domanda, ma quasi tutti non lo sono):
Your password must be four characters length and have only digits.
(Limitando una password all'intervallo 0001 .. 9999, puoi semplicemente archiviarli come numeri, in chiaro, nel database)
- Altri sono spiegati da alcuni pensieri errati che renderanno le password più sicure :
Your password must start with a capital letter and end with a digit.
(In questo modo lo sviluppatore, o il gestore, ha ipotizzato che questo costringa effettivamente gli utenti a scegliere una password sicura, mentre la regola come "La password deve contenere almeno 6 caratteri e contenere almeno una lettera maiuscola, una lettera minuscola e una cifra "non riescono magicamente a farlo)
- Altro, infine, sono spiegati dal fatto che le password sono memorizzate plaintext , e ci sono alcune ambiguità su come vengono memorizzate, elaborate o recuperate, e ci sono non c'è tempo per testarli.
Your password contains an invalid character é
.
o
Your password y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
contains some invalid characters. Use characters from Latin alphabet and digits only.
o
Your password cannot contain whitespace characters.
In tutti e tre i casi, lo sviluppatore si è assicurato che password come questa verranno archiviate correttamente.
-
Nel primo caso, cosa succede se é
verrà trasformato in %C3%A9
quando inviato? O se il database memorizzasse é
in modo errato?
-
Nel secondo caso, cosa succede se PHP (perché PHP?) non può gestire unicode e fa qualcosa di terribile quando riceve una password come questa? Cosa succede se il carattere <
causa problemi? Cosa succede se il carattere &
viene interpretato come separatore in un URL (presupponendo che, per qualche motivo, la password venga inviata tramite GET anziché POST)? Cosa succede se '
viene interpretato dal database, perché, indovina cosa, non abbiamo idea di cosa sia SQL Injection e come evitarlo? O cosa succede se '
viene trasformato in \'
?
-
Nel terzo caso, che succede se PHP (ancora?) taglia gli spazi bianchi in alcuni casi e non in altri? Cosa succede se gli amministratori (che hanno sorprendentemente l'accesso alle password degli utenti in testo semplice) vengono persi perché vedono solo uno spazio bianco, mentre l'utente ha impostato tre spazi bianchi consecutivi ?
In tutti e tre i casi, tali ambiguità sono facilmente risolvibili tramite test , in particolare i test di unità. Ma in una quantità enorme di progetti, non ci sono affatto test e non c'è tempo per testare (ma c'è ancora tempo per eseguire il debug in un secondo momento).
Ciò significa che lo sviluppatore cerca di pensare alle possibili conseguenze di consentire spazi , o caratteri unicode, o qualsiasi carattere al di fuori di ASCII 48..57 ∪ 65..90 ∪ 97 .. 122 (cifre, lettere minuscole, lettere maiuscole), il modo più semplice, quando il test non è possibile, è vietarli solo .
Secondo me, questa è l'unica ragione per vietare gli spazi. Yannis Rizos ha fornito un altro motivo correlato a UX. Pur essendo una ragione plausibile in teoria, nella pratica non funziona affatto: i siti Web creati da persone che si preoccupano veramente di UX non risolvono le stupide regole della password. Invece, siti web in cui gli spazi bianchi sono effettivamente proibiti sono in gran parte realizzati da persone che non hanno mai sentito parlare di UX . Questo è particolarmente vero dal momento che vietare qualsiasi carattere è davvero fastidioso dal punto di vista di UX, come qualsiasi restrizione relativa alla password, compresi gli utili, come il numero minimo di caratteri.