Domanda

Una società che conosco è in trattativa per rassodare la sua politica di password di sicurezza in tutti i suoi prodotti di applicazioni web.

In questo momento sono l'invio di autenticazione nome utente / password in forme POST su HTTP, e, quindi, essi vengono inviati in chiaro.

La soluzione più semplice al problema è semplicemente quello di richiedere HTTPS per l'accesso in tutte le nostre applicazioni, giusto?

Bene, c'è qualche discussione interna su, invece di fare una sorta di crittografia roll-our-proprio sul lato client di password (password + sale, ecc).

C'è una soluzione solo HTTP accettato?

Le opinioni sono come ... beh, ognuno ha un parere, quindi non vedo per la letteratura di sicurezza credibile in grado di supportare la vostra raccomandazione. Non solo google e mandarmi in un post sul blog ... ho già fatto e oltre.

Ho trovato le raccomandazioni di OWASP: http://www.owasp.org/index.php/Top_10_2007-A7# protezione

Oltre a Microsoft: http://msdn.microsoft.com/en-us/library/aa302420. aspx

Modifica Dare la vostra raccomandazione per l'utilizzo di SSL non è sufficiente. Ho bisogno di un qualche tipo di documentazione di supporto. SO che a rotazione la nostra crittografia lato client è male. Ho bisogno di essere in grado di vendere in modo credibile che a collaboratori e la gestione.

Inoltre, HTTP Digest è stata menzionata. Sembra bello, ma Digest è SOLO per l'autenticazione HTTP, e non per i dati inviati tramite POST.

È stato utile?

Soluzione

1 di Mehrdad risposta . Andando avanti con la crittografia home-grown è rischioso.

Parlando per esperienza qui, dopo aver visto le vulnerabilità in soluzioni di cifratura client-side di produzione propria. La maggior parte delle vulnerabilità sono dovute alla stessa ragione - il trasferimento dei dati è stato protetto da crittografia con una chiave segreta, ma la chiave stessa è stata scambiata in un modo insicuro

.

TLS / SSL risolve il problema di non solo garantire lo scambio di chiavi, ma anche di trasferimento sicuro dei dati.

TLS / SSL protegge le informazioni sensibili utilizzando la crittografia a chiave asimmetrico di scambiare la chiave simmetrica utilizzata per crittografare le informazioni avanti e indietro, una volta che la sessione TLS / SSL è stata stabilita. La chiave simmetrica viene generata in fase di esecuzione, ed è un segreto condiviso tra il client e il server; è questa chiave utilizzata per crittografare tutto il traffico una volta che la sessione è pronto per il trasferimento dei dati.

chiavi pubbliche e private del server vengono utilizzati solo per lo scambio di questo segreto condiviso. L'unico modo conosciuto per compromettere la chiave condivisa è quello di compromettere la chiave privata del server (in modo che la chiave segreta può essere decifrato). In realtà, richiede negligenza o dolo da parte dell'amministratore del server.

.

Se si tira la propria soluzione di crittografia, è necessario scambiare la chiave simmetrica, in maniera sicura Il modo più semplice per farlo è quello di utilizzare TLS / SSL; il modo più difficile è quello di implementare la propria soluzione di scambio di crittografia a chiave asimmetrico.

Altri suggerimenti

I highly consiglio contro andare con la propria soluzione (in ambienti sensibili di sicurezza). Vai con SSL. Si tratta di una tecnologia collaudata ed è facile da implementare.

posizionare il proprio le soluzioni di sicurezza può essere davvero pericoloso e anche se è implementato correttamente (0,000001% di possibilità), è sarà essere costoso.

Se i dati in sé non è troppo sensibile, ma le password sono, io suggerirei di utilizzare HTTP autenticazione digest (che è piuttosto una bestia diversa da autenticazione di base HTTP). E 'abbastanza sicuro su HTTP dritto, e non è affatto difficile da attuare sul server. Nulla viene inviato attraverso il filo che potrebbe rivelare ciò che la password è, solo le informazioni che permette al cliente di dimostrare al server che hanno la password corretta.

Se si desidera una spiegazione decente di come implementare l'autenticazione HTTP Digest nell'applicazione, Paul James ha un eccellente articolo su di esso .

L'unico vero problema con l'autenticazione HTTP è nei browser stessi: l'interfaccia utente è terribile, ma che può essere superare con qualche JavaScript .

È possibile memorizzare le password in modo sicuro memorizzando l'hash A1.

UPDATE:. Come già detto in altre risposte, mentre il server può evitare attacchi MITM non accettando auth di base, il cliente è ancora vulnerabile perché sarà

UPDATE:. Non è possibile proteggere i dati su POST a meno che non sia (a) codifica in JavaScript sul client o, (b) fare tutto su SSL

possono , con un po 'di magia, l'uso di autenticazione HTTP con le forme. L'articolo che ho linkato sopra si chiama 'HTTP Auth con moduli HTML', dopo tutto. Ma questo non sarà fatto nel corso POST.

Se davvero bisogno si usa POST, l'utilizzo di SSL e sale le password nel database.

Se si vuole evitare di CSRF, mi consiglia di utilizzare formkeys , anche se l'idea va da molti nomi diversi, ho preso quel nome dall'incisione Slashcode per mio uso di qualche anno fa, che è dove mi sono imbattuto per primo.

Si spenderà più tempo e denaro rotolare la vostra soluzione e non essere certi che è sicuro. Industria SSL standard è facile da implementare e molto più sicuro, fuori dalla scatola di quello che può permettersi di fare la vostra soluzione.

tempo == denaro

Acquista un certificato e trascorrere il vostro tempo a lavorare sulla sua applicazione al posto di un modulo di login sicuro.

la crittografia lato client è impotente contro la maggior parte degli attacchi MITM. L'attaccante può semplicemente rimuovere lo script.

Sarà proteggere solo contro sniffing passivo. Se questo è abbastanza buono per voi, è possibile utilizzare:

  • di hashing implementato in JavaScript. E 'facile da implementare sfida-risposta per il login iniziale, ma non dimenticate che per cookie di sessione attaccante è quasi buono come password (che avrebbe dovuto limitare login per singolo IP e / o utilizzare script per generare cookie di una tantum per ogni richiesta, che immagino sarebbe difficile e la soluzione fragile).
  • HTTP di autenticazione Digest. Più sicuro, in quanto può utilizzare gli hash di una volta, autenticazione reciproca, ecc, ma standard di interfaccia utente è assolutamente ripugnante.

... basta usare SSL.

HTTP solo soluzioni saranno sempre suscettibili di attacchi di tipo man-in-the-middle.

EDIT:. Una traccia di rete potrebbe essere un modo semplice per dimostrare che HTTP non è sicura

Ok, ecco l'unica risposta che serve: la tua banca supporta solo login / auth tramite SSL. Se ci fosse un modo migliore per farlo, lo farebbero.

  

Bene, c'è qualche discussione interna   Chi invece facendo una sorta di   roll-nostra-own crittografia lato client di   le parole d'accesso (password + sale, ecc.).

La prima cosa che dobbiamo affrontare è dati in transito contro i dati a riposo. Dal OP che suona come la grande preoccupazione è username / password in chiaro su Internet. Quindi, si ha realmente a cuore i dati in transito. HTTPS tramite SSL è un metodo collaudato di fare questo (ed è una correzione abbastanza facile!). Ora, se si vuole veramente a rotolare il proprio per i dati a riposo (in un db, su un file server, ecc), che è una bestia diversa, ma i metodi esistenti per la crittografia dei dati stanno per essere meglio di un rotolo il proprio .

Basandosi sul lato client per la vostra sicurezza è male. Periodo. In un ambiente aziendale, sì, è possibile in qualche modo fare affidamento su una configurazione standard. Ma, in ultima analisi, gli utenti sono muti e si può incorrere in qualcuno disabilitando JavaScript o qualsiasi client basato su soluzione si tira fuori, così finiscono per inviare il nome utente / password in testo normale in ogni caso (anche se i server Dont' sanno cosa fare con esso perché non è nel formato previsto.

roll-your-own non sta per essere soggetto al controllo che una soluzione esistente ha. Si potrebbe finire per l'aggiunta di ulteriori questioni di sicurezza nel mix a causa del codice.

Abbiamo appena messo fuori un web / mobile app per fare alcune di queste cose. Si crea URL casuali per i login, utilizzando HTTPS e / metodo di crittografia AES hash per l'archiviazione di database. C'è una semplice API JSON usarlo senza il nostro utente, ecco la nostra interessante resoconto, dare uno sguardo .. http://blog.primestudiosllc.com/security/send-time-limited-secure-logins-with-timebomb-it

che lei ha citato fare la vostra propria crittografia più sale ... Io suggerisco di usare javascript md5 (è utilizzato anche da Yahoo sulle loro pagine non SSL, o almeno così sostiene) ...

E si fa doppio hash della password ... Alcuni potrebbero obiettare che l'hashing doppio renderebbe inclini ad attacchi di collisione. Avrei dovuto essere in disaccordo, perché le persone sono state in grado di fare fino ad ora le collisioni di firma MD5 solo su file, in cui è md5'ed grandi quantità di dati ...

Se si tratta di un grande sito web aziendale (e non ci sarebbe motivo di rompere a) non v'è alcuna scusa per non utilizza SSL.

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