Domanda

Lavorare su un sistema di accesso: il punto in cui il cliente sceglie la password per l'accesso al sito.

Oltre a utilizzare RegEx per garantire che la password sia abbastanza forte, normalmente sul nostro sistema tutti i dati che verranno caricati nel database vengono controllati contro l'iniezione ecc. e un set di caratteri ragionevolmente limitato viene applicato su tutti i campi. Non voglio davvero un set di caratteri particolarmente restrittivo per la password, poiché penso che sia un po 'anti-schema sulla sicurezza controllarlo troppo.

Tuttavia, nel caso della password, la tratterò con un SHA-512 salato per l'inserimento che solleva una manciata di domande:

  • C'è qualche punto nel limitare il set di caratteri che il cliente può usare nella password - cioè sono esposto a eventuali vulnerabilità al di fuori dell'iniezione che presumo sarebbero state completamente eluse dall'hash?

  • Devono esserci aspetti negativi di un approccio che consente tutti - posso pensare al fatto che in futuro quella che è una combinazione innocente ora potrebbe diventare pericolosa - è una vera preoccupazione, e ce ne sono altri che potrebbe esserti perso?

  • Esistono caratteri / stringhe che devono essere respinti - avrebbero comunque superato la protezione ASP.NET nativa?

  • Forse un po 'più soggettivo, ma dato che è un hash SHA-512 - c'è qualche punto nel limitare la lunghezza massima della password che l'utente può scegliere (entro parametri ragionevoli), supponendo che una password di significativo dimensione / complessità potrebbe generare un avvertimento per confermare che vogliono impostarlo.

Grazie per il tuo aiuto.

EDIT: si tratta di un'applicazione Web ASP.NET che accede a un database MSSQL2008 utilizzando ADO.NET (non LINQ / EF).

È stato utile?

Soluzione

Ci sono poche ragioni per preoccuparsi degli attacchi all'inserzione di SQL a meno che tu non stia effettivamente inserendo la password nel database in testo normale (Danger, Will Robertson, Danger!) e anche se paramaterizzi la query non sarà un problema. Dovresti consentire [a-zA-Z0-9] oltre ad alcuni set di caratteri speciali. Probabilmente l'unico carattere da limitare è '& Lt;' che attiverà l'avviso di convalida ASP.net. Esistono numerosi strumenti divertenti per eseguire il controllo della complessità della password sul lato client. Mi piace questo . Fornisce un feedback immediato all'utente durante la digitazione.

Altri suggerimenti

Da una prospettiva non inglese - non dovrebbero esserci restrizioni sulla password.

Ad esempio, perché limitare un oratore di lingua giapponese all'uso del set di caratteri US-ASCII? E perché un oratore francese non dovrebbe usare caratteri accentati?

Dato che il tuo hash è persistito correttamente non c'è motivo tecnico per limitarlo.

Poiché la password è sottoposta a hash, verrà archiviata nel database in formato decimale esadecimale. Pertanto, non vedo il punto di limitare il tipo di caratteri consentiti. Se volessi usare una lettera cinese nella mia password, dovrei essere in grado di farlo. Se ho installato un'estensione per Firefox che genera byte casuali e li utilizza per le mie password, dovrei essere in grado di farlo. La lezione qui è di non limitare le password dei tuoi utenti.

Si noti inoltre che RegEx ha un supporto unicode in grado di rilevare se l'utente ha usato una lettera di qualsiasi lingua. Ciò potrebbe rivelarsi utile durante la convalida della forza della password.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top