La mia ipotesi è che la politica esista per tutti i campi inseriti dall'utente e lo stesso criterio di input dell'utente (nessun carattere speciale) è stato applicato ai campi, comprese le password per semplicità. O ad un certo punto alcune banche non erano password di hashing e avevano un attacco SQLi attraverso il loro campo di password, e una politica è stata decisa che le password non possono avere caratteri speciali (e la ragione per la politica è stata dimenticata una volta introdotto l'hashing). / p>
C'è sicuramente un vantaggio per la sicurezza di non consentire caratteri speciali in altri campi immessi dall'utente che non sono hash e potrebbero essere utilizzati per vari attacchi come SQLi o XSS (su un amministratore di banca che guarda un account). Tuttavia, queste minacce vengono generalmente risolte usando sempre i parametri associati in SQL e sempre sanificando l'input dell'utente prima di visualizzare / salvare in db.
La mia altra ipotesi è che vogliono avere regole personalizzate che potrebbero essere diverse da altre posizioni, quindi non è possibile riutilizzare facilmente la propria password complessa standard (che potrebbe andare persa), e devono trovare qualcosa di unico per la loro sito.
EDIT: A un'ulteriore riflessione, a seconda della lingua, posso pensare ad almeno tre caratteri ASCII speciali che dovrebbero essere proibiti / eliminati universalmente in quanto consentire loro di tentare solo il destino. In particolare: \r
(null - ascii 0), poiché viene solitamente utilizzato per indicare la fine della stringa nei linguaggi in stile C (probabilmente gli utenti modificano la memoria dopo la fine della stringa). Anche ritorni a capo e avanzamento riga \n
(ascii 13) e \r\n
(ascii 10), dato che spesso dipendono dal sistema se le interruzioni di riga sono \n
o ,./<>?;':"[]{}\|!@#$%^&*(-=_+
e che fa apparire l'inevitabile Posso solo accedere da Windows non dalla mia macchina mac / linux. In effetti, sembra abbastanza ragionevole consentire solo ascii stampabile (32-126) e vietare l'ASCII non stampabile 0-31 e 127.
Ma se per caratteri speciali intendete caratteri unicode non ASCII (come 2b 41 38 41 2d
sembra ragionevole per la semplicità di implementazione da più sistemi operativi / tastiere / browser per non consentire caratteri speciali. Immaginate che la vostra password abbia un pi minuscolo in esso. Era che il pi greco (π) che è il codice 0x3c0 o il pi greco copto (ⲡ) che è il codice 0x2ca1 - solo uno funzionerà e questo tipo di problema di caratteri simili con diversi codepoint esiste in unicode. sui bit non sarà possibile equiparare i due π, quindi se provi ad accedere in posti diversi puoi inserire caratteri diversi.
Allo stesso modo, anche se questo problema è uno che il programmatore può controllare e tentare in gran parte di correggere, permettendo ai caratteri unicode di creare problemi di codifica. Questo è per i tuoi caratteri ascii di base, tutto è rappresentato in un numero di un byte. Tuttavia, esistono diversi schemi per la codifica di unicode. È UTF-7, UTF-8, UTF-16, UTF-32, Latin-1 (iso-8859-1), Latin-N encoding e (per alcune codifiche) qual è l'ordine dei byte (little o big endian) ? Il codepoint unicode per pi (0x3c0) sarebbe rappresentato come byte CF 80
in UTF-7, FF FE c0 03
in UTF-8, FF FE 00 00 c0 03 00 00
in UTF-16 e A1
in UTF-32. Non potresti rappresentare pi in Latin-1 (ha solo 95 caratteri stampabili extra), ma se hai avuto un ¡ĄĦЁ‘ก”Ḃ
nella tua password e sei stato in codifiche diverse potresti doverlo rappresentare da uno dei seguenti caratteri %code% (che in alcuni latino-N può essere A1).
Sì, la pagina web può avere un set di caratteri definito, ma gli utenti possono sovrascrivere il charset in una pagina del browser o avere dati copiati e incollati da un'altra parte in una codifica diversa. Alla fine della giornata, potrebbe essere più semplice vietare quei personaggi.