Esistono moltissime stupidità quando si tratta di password nei siti Web.
- Alcuni hanno motivi puramente tecnici (validi o meno, questa è un'altra domanda, ma quasi tutti non lo sono):
La password deve contenere quattro caratteri e contenere solo cifre.
(Limitando una password all'intervallo 0001 .. 9999, è possibile semplicemente memorizzarli come numero, testo normale, nel database)
- Altri sono spiegati da alcuni pensieri errati che renderanno le password più sicure :
La password deve iniziare con una lettera maiuscola e terminare con una cifra.
(In questo modo lo sviluppatore o il gestore hanno ipotizzato che ciò costringerà effettivamente gli utenti a scegliere una password sicura, mentre la regola come "La tua password deve contenere almeno 6 caratteri e contenere almeno una lettera maiuscola, una lettera minuscola e un digit "non riuscirà magicamente a farlo)
- Altri, infine, sono spiegati dal fatto che le password sono memorizzate in chiaro e che ci sono alcune ambiguità su come sono archiviate, elaborate o recuperate e non c'è tempo per testarle.
La tua password contiene un carattere non valido é
.
o,
La tua password y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
contiene alcuni caratteri non validi. Usa solo caratteri dell'alfabeto latino e delle cifre.
o,
La tua password non può contenere caratteri di spazi bianchi.
In tutti e tre i casi, lo sviluppatore era solo sicuro che password come questa sarebbero state memorizzate correttamente.
Nel primo caso, cosa succede se é
verrà trasformato in %C3%A9
quando inviato? O se il database verrà archiviato in é
modo errato?
Nel secondo caso, cosa succede se PHP (perché PHP?) Non è in grado di gestire unicode e fa qualcosa di terribile quando si riceve una password come questa? Cosa succede se il <
personaggio causa problemi? Cosa succede se il &
carattere viene interpretato come separatore in un URL (supponendo che per qualche motivo, la password venga inviata tramite GET anziché POST)? Cosa succede se '
viene interpretato dal database perché, indovinate un po ', non abbiamo idea di cosa sia SQL Injection e come evitarlo? O cosa succede se '
si trasforma in \'
?
Nel terzo caso, cosa succede se PHP (di nuovo?) 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 chiaro) vengono persi perché vedono solo uno spazio bianco, mentre l'utente ha impostato tre spazi bianchi consecutivi ?
In tutti e tre i casi, queste ambiguità possono essere facilmente risolte attraverso i test , in particolare i test unitari. Ma in una grande quantità di progetti, non ci sono test e non c'è tempo per testare (ma c'è ancora molto tempo per eseguire il debug in seguito).
Ciò significa che se lo sviluppatore tenta di pensare alle possibili conseguenze del consentire spazi , caratteri unicode o qualsiasi altro 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, è semplicemente vietarli .
Secondo me, questa è l'unica ragione per vietare gli spazi. Yannis Rizos ha fornito un'altra ragione legata alla UX. Pur essendo una ragione plausibile in teoria, in pratica non funziona affatto: i siti Web realizzati da persone che si preoccupano effettivamente di UX non fissano regole stupide per le password. Invece, i siti Web in cui è effettivamente vietato lo spazio bianco sono in gran parte realizzati da persone che non hanno mai sentito parlare di UX . Ciò è particolarmente vero poiché vietare qualsiasi personaggio è davvero fastidioso dal punto di vista UX, come qualsiasi restrizione relativa alla password, compresi quelli utili, come il numero minimo di caratteri.