Best practice per l'autenticazione / sicurezza delle applicazioni Web (qualsiasi piattaforma)

12

Oggi ho ricevuto una domanda dal mio manager che mi chiedeva le mie opinioni su ciò che è considerato un progetto accettabile per l'autenticazione di un'applicazione di modulo Web, in particolare per quanto riguarda la natura di molti browser popolari su "Ricorda password" per il tuo nome utente tipico campi di accesso password.

Ho difficoltà a trovare una risposta che ritenga accettabile. Alla luce dei problemi di sicurezza imbarazzanti di Sony, voglio davvero fare attenzione, anche se i dati memorizzati sulle persone hanno una sensibilità inferiore. Non memorizziamo numeri di previdenza sociale o addirittura indirizzi, tuttavia stiamo memorizzando numeri di telefono, indirizzi e-mail e una foto di un visitatore.

È preoccupato che un utente possa semplicemente ricordare la password su un terminale pubblico, quindi qualcuno può semplicemente saltare su questo terminale e iniziare a visualizzare o modificare i dati in modo non autorizzato. Sono abbastanza sicuro, tuttavia, che almeno sulle workstation Windows il browser non "ricorda la password" tra gli account utente di Windows.

Oltre a questo sto implementando una crittografia password unidirezionale sul lato server (memorizza la password crittografata nel database, crittografa la password fornita dall'utente sul server, confronta con la stringa crittografata dal database). Non ci sono piani immediati per incorporare la crittografia SSL, tuttavia questa è ancora un'opzione.

Ci sono grossi problemi di sicurezza con questo approccio? Hai suggerimenti migliori?

    
posta maple_shaft 23.05.2011 - 20:05
fonte

5 risposte

13

Alcuni suggerimenti di alto livello:

  1. Archivia solo i dati necessari
  2. Codifica sempre i dati sensibili (SSN, password, numero di carta di credito, ecc.) quando lo memorizzi
  3. Codifica sempre il traffico utilizzando SSL durante la trasmissione / ricezione di dati sensibili
  4. In caso di dubbi sulla sensibilità delle informazioni, criptalo
  5. Non fidarti dell'input dell'utente (qualcuno cercherà di inserire qualcosa di brutto)
  6. Non ti fidare dei tuoi dati (qualcuno può cambiarli nel database - ad esempio inserendo script malevoli)
  7. Non eseguire il rollover della propria crittografia
  8. Proteggi i server che ospitano le applicazioni / i database
  9. Aumentare l'onere per gli utenti finali a fini di sicurezza (restrizioni della password, mai rivelare password, non inviare URL in email, ridurre i tempi di sessione, ecc.)

Il mio suggerimento sarebbe di ottenere un libro sulla protezione delle applicazioni Web. Ci sono troppe informazioni da trasmettere in un'unica risposta / blog / articolo. L'argomento della crittografia da solo è sostanziale.

    
risposta data 23.05.2011 - 20:57
fonte
2

Puoi provare a superare il comportamento del browser: alcuni buoni consigli qui:

link

    
risposta data 23.05.2011 - 20:12
fonte
1

Direi che dovresti stare bene.

La maggior parte degli utenti sarà abbastanza brillante da non salvare la propria password su un terminale pubblico e le password verranno memorizzate per profilo. Tieni presente che potrebbero facilmente scriverlo su una nota adesiva o utilizzare una password debole.

Se la pagina di accesso non è crittografata su SSL, non sarebbe troppo difficile per un utente malintenzionato annusare quella password mentre viaggia sulla rete. Un buon lavoro di hashing della password nel database, che impedirà a un potenziale malintenzionato di vedere le password di tutti (che potrebbero utilizzare con l'indirizzo email per tentare di accedere ad altri siti in cui l'utente potrebbe trovarsi).

Se vuoi ancora, ci sono modi per disabilitare il comportamento del browser, come ha sottolineato Chad. L'ho visto solo sul sito web della mia banca e sul sistema Live di Microsoft.

    
risposta data 23.05.2011 - 20:38
fonte
1

A un certo punto, non è possibile (e non è richiesto dalla legge) proteggere un utente da se stesso. La funzionalità "Ricorda password" può essere rischiosa, ma è un rischio assunto dall'utente. Allo stesso modo, se l'utente decide di riutilizzare la propria password per più servizi, si assume anche tale rischio. Inoltre, non è necessario avvisarli di non scrivere la password su una nota adesiva e di incollarla sul loro monitor, anche se spesso gli utenti lo fanno anche loro.

Cioè, fino a quando qualcuno non si oppone con successo e cambia le regole. Vedi anche: "Attenzione: il contenuto potrebbe essere caldo".

    
risposta data 23.05.2011 - 20:48
fonte
0

Non penso che tu possa controllare in modo affidabile se il browser ricorda o meno una password. È semplicemente fuori dalle tue mani se il browser lo fa o no. Né è necessariamente un enorme rischio per la sicurezza per tu . Si dovrebbe sempre presumere che gli attacchi possano essere fatti da accessi validi. Non dare per scontato che qualcuno abbia un login / utente valido che non sarà in grado di fare. Ci sono molti modi in cui le password possono finire nelle mani sbagliate, dopotutto.

Suppongo che ciò che potresti fare è randomizzare i nomi dei campi nel modulo di accesso ogni volta. Invece di <input name="username" , usa qualcosa come <input name="user658667587" . Ciò renderebbe i nomi utente memorizzati nella cache abbastanza inutili. Ma non so se ne valga la pena. Per non parlare degli inconvenienti utenti che arent su macchine pubbliche.

Se ti trovi in una situazione estremamente delicata sulla sicurezza (bancaria, investimenti) potresti semplicemente chiedere alle persone durante l'accesso se si tratta di una macchina pubblica. È inoltre possibile memorizzare nella cache gli indirizzi IP conosciuti quando le persone effettuano l'accesso e, se accedono da una posizione diversa, richiedono un numero di pin non tipografico (ad esempio, fare clic sulle immagini) oltre al normale utente / pass. La mia banca fa qualcosa di simile a quello.

    
risposta data 23.05.2011 - 20:44
fonte

Leggi altre domande sui tag