Sono appena arrivato a un concerto di PHP5. Non gestirò le parti dell'applicazione che coinvolgono dati super sensibili, ma conosco ancora in modo imbarazzante poco i metodi di sicurezza e crittografia. Conosco solo le basi (non memorizzare le password in chiaro, non consentire agli utenti di eseguire codice usando i dati dei post, ecc.). Cosa devo sapere per proteggere le mie applicazioni e dove posso impararle?Che cosa dovrebbero sapere tutti gli sviluppatori web sulla crittografia?
risposta
imparare la differenza tra hash e la crittografia. Le crittografie sono generalmente interpretazioni a due vie di una stringa. Posso crittografare la mia password e quindi decifrarla di nuovo in testo normale. L'idea dietro gli hash è che diventano una "crittografia" unidirezionale.
Nei miei siti memorizzo le password come hash. Ogni volta che un utente si collega, re-hash la password fornita, testarla contro l'hash memorizzato nel database e approvare se corrispondono. Non posso inviare loro la password se la dimenticano, poiché (generalmente) non c'è modo per me di sapere. Due stringhe diverse possono tradursi nello stesso hash, il che rende (generalmente) impossibile scoprire quale fosse la stringa originale.
Questo è un problema che consente di ottenere una comprensione approfondita e discernere quando utilizzare la crittografia rispetto agli hash.
L'hashing della password come questo è solo di valore limitato. Certo, non è possibile vedere la password in testo semplice, ma se l'hash è sempre lo stesso, non è necessario per compromettere un sistema con un attacco uomo in mezzo. – Thorarin
@Tarinarina: valore limitato? La tecnica di memorizzare una password con hash e confrontarla con un hash della password fornita è pratica comune. SSL impedisce l'accesso a un over the wire nel mezzo o l'attacco di replay. Chiedere a tutti di portare un portachiavi RSA (o equivalente) in giro sarebbe l'ideale, ma non è ancora pratico (ancora). E se l'utente ha malware sul proprio computer, sono fottuti in entrambi i modi, quindi non andiamo nemmeno lì. –
L'hashing è quasi inutile senza sale; fai una ricerca su Google per "tavole arcobaleno" su come gli hash non salati possono essere facilmente compromessi. –
In primo luogo si deve familiarizzare con questo metodi php:
Here avete tutte le estensioni di crittografia in PHP.
md5 è così rotto al giorno d'oggi, a causa delle tavole arcobaleno. – Macha
Questo è un po 'esagerato. Basta aggiungere un sale e il tavolo dell'arcobaleno è inutile. –
Sono state trovate collisioni MD5. Nessuno ha ancora dimostrato alcuna collisione SHA1. –
La risposta breve
si può mai essere troppo sicuri
Usa Salted hashing delle password per una maggiore sicurezza
La risposta più lungo (non ancora completa, però)
La sicurezza non è qualcosa che si apprende da un rapido tutorial sul web. Richiede una conoscenza approfondita non solo di quali vulnerabilità esistono, ma WHY esistono e COME funzionano. Uno dei maggiori problemi (specialmente nell'open source) è che i nuovi metodi vengono aggiunti continuamente, quindi è necessario comprendere concetti e teoria della sicurezza.
Leggere libri, prendere lezioni e testare le vulnerabilità su una macchina locale. Quindi il lentamente inizia a cogliere l'idea alla base di come proteggere un'applicazione web.
controllare il seguente per iniziare voi fuori
Dove per conoscere la sicurezza: ottenere il libro di Schneier Applied Cryptography.
Che può essere rotto, non importa quello che fai.
+1 e la verità nella maggior parte dei casi è che scrivere la tua routine è una mossa stupida. – Fredrik
Questo non è affatto informativo. Si tratta di gestire i rischi. Non puoi nemmeno prevenire la morte negli ospedali. In realtà, non puoi impedire la morte. Ciò non significa che gli ospedali siano inutili. Di per sé, questa affermazione non ha senso. –
sapere di non scrivere le proprie funzionalità di crittografia. Una libreria esistente e affidabile è il modo migliore per andare dove è possibile. Evita le tecnologie innovative e all'avanguardia che mancano di molte ore di programmazione e ore di utilizzo alle spalle. Sappi di non fidarti della funzionalità che scegli fino a quando non l'hai completamente testato tu stesso, in prima persona. Tenersi aggiornati sui nuovi sviluppi che potrebbero rendere obsoleta la funzionalità scelta durante la notte. Sappi che solo perché stai utilizzando la migliore tecnologia di crittografia disponibile oggi che non hai protetto nulla se lasci le chiavi sulla tabella (ad esempio, il testo non è in una cache o è memorizzato in un'altra tabella nello stesso database, le chiavi private non lasciato a cielo aperto)
- capire la differenza tra encrypting e hashing
- capire il motivo di salts
- Capire che HTTP è cifrato
- Comprendere cosa HTTPS è
- Understa e non sarà mai (quasi mai) in grado di creare migliori hashing o metodi di cifratura rispetto a quelli di terze parti lib e librerie incorporate già
Questa tecnologia non è l'anello più debole nella sicurezza.
Vuoi dire, come, l'account yahoo di Ms Palin? – Smandoli
Non sono d'accordo, ho per esempio ora 4 password. Penso che se avessi 1 password non avrei bisogno di scriverlo, ma posso digitare solo la password errata 3 volte, quindi non posso ricordarlo e devo scriverlo. – IAdapter
@ 01: questo problema si attenuerebbe se più aziende iniziassero ad utilizzare pass * frasi * invece di password. È molto più facile ricordare una frase che una sequenza casuale di caratteri e molto più difficile cercare una frase in un dizionario. Questo ** è ** una carenza tecnologica, e uno che sta esacerbando una debolezza umana. –
Si prega di prestare attenzione ai seguenti punti quando si memorizzano le password,
password con hash è generalmente più sicuro perché non si dispone di mantenere un segreto. Tuttavia, ti impedisce di utilizzare altri schemi basati su hash nel tuo flusso di autenticazione. Ad esempio, non è possibile utilizzare l'autenticazione HTTP Digest con password hash.
L'hash semplice è soggetto all'attivazione della tabella arcobaleno (http://en.wikipedia.org/wiki/Rainbow_table). Aggiungi un nonce non ricorrente all'hash o usa il nonce come chiave per HMAC. Il nonce deve essere memorizzato con le password. Lo affido al digest.
Se si utilizza la crittografia, assicurarsi che venga utilizzato un vettore iniziale casuale, in modo che la stessa password venga crittografata per diversi testi cifrati per utenti diversi. Altrimenti, si è predisposti agli attacchi di pattern matching. MySQL ha un comando di crittografia incorporato. Non inserisce IV, quindi non usarlo mai per le password.
Salva nome della chiave/la versione con il testo cifrato in modo chiavi possono essere ruotati. La rotazione delle chiavi è necessaria per la conformità con determinati standard. La crittografia senza informazioni chiave è impossibile da decifrare quando si è costretti a modificare o ruotare le chiavi.
Se si seguono questi consigli, le password saranno sicure con qualsiasi schema di crittografia/hash.
"Per favore aggiungi un nonce non ricorrente all'hash" - Intendi un sale? – hannson
Il sale si riferisce normalmente all'aggiunta di qualsiasi cosa all'hash. Nonce è un tipo di ordinamento che può essere utilizzato solo una volta. –
Nonce ?! Questo è un concetto piuttosto sfortunato. – UpTheCreek
Scopri i Open Web Application Security Project. Hanno un sacco di informazioni sulle attuali problematiche di sicurezza della web app e su cosa devi fare per difenderti. OWASP sta mettendo insieme un Development Guide che fornisce molte buone informazioni sulle app Web e sui problemi di sviluppo dei servizi web.
Se stai cercando la cosa da un contesto PHP, vi consiglio questo libro:
La cosa che mi piace di questo libro è che copre molto di più di un semplice elenco di funzioni relative alla sicurezza in PHP. Gran parte di essa copre concetti generali di sicurezza web e meccanismi di protezione. Le autorizzazioni, il principio del minimo privilegio, la crittografia, l'hashing, lo scripting cross-site, le falsificazioni di richieste cross-site, il dirottamento di sessione, ecc. Sono tutte qui trattate, con esempi di scrittura di codice sicuro in PHP.
Dopo aver preso lezioni di sicurezza a livello di laurea al college, sono impressionato con la copertura in questo libro. Prenderò in considerazione la necessità di leggere per qualsiasi sviluppatore PHP professionale.
- 1. Gli sviluppatori web dovrebbero ancora imparare JavaScript?
- 2. Proxy Web per gli sviluppatori
- 3. Quali componenti del framework .Net dovrebbero evitare gli sviluppatori professionisti?
- 4. Dev parallelo: gli sviluppatori dovrebbero lavorare all'interno dello stesso ramo?
- 5. Perché gli sviluppatori non dovrebbero essere in grado di distribuire direttamente nella produzione?
- 6. Esiste un sito Web per gli sviluppatori Web che desiderano dedicare tempo allo sviluppo in beneficenza?
- 7. "parassita Combinazione Inheritance" in Professionale JavaScript per gli sviluppatori web
- 8. I migliori feed di notizie per gli sviluppatori Web, RSS
- 9. Come condividere le regole FxCop tra tutti gli sviluppatori?
- 10. Perché gli sviluppatori PHP sono meno costosi degli sviluppatori .NET?
- 11. Una chiave di Google Maps per tutti gli sviluppatori?
- 12. Per gli sviluppatori che utilizzano mongodb per creare le proprie app Web, cosa si fa per le lunghe chiavi primarie?
- 13. In che modo gli sviluppatori open source fanno soldi?
- 14. Blog e libri sulla crittografia e sulla sicurezza
- 15. Qt per gli sviluppatori Delphi
- 16. crittografia web.config per siti Web
- 17. Che cosa significa "aggiornamenti in sospeso" nella Console per gli sviluppatori di Google significa
- 18. Che cosa significa il nuovo "Retina Display" per gli sviluppatori iPhone?
- 19. Gli sviluppatori di javascript devono conoscere jquery?
- 20. Trova tutti gli stili CSS utilizzati sul sito Web
- 21. Restituisce tutti gli attributi di un HtmlElement nel browser Web
- 22. Sviluppatore Android che si sposta su iOS: cosa devo sapere?
- 23. Django per gli sviluppatori web2py
- 24. Crittografia Web Config utilizzando ASPNET_REGIIS
- 25. Schemi di comunicazione per gli sviluppatori senior
- 26. Domande sulla crittografia delle risorse dell'applicazione Google Play
- 27. Come faccio a sapere che cosa vengono esportati tutti i simboli da un oggetto condiviso?
- 28. Che cosa sono diversi tipi di certificato, formati in Crittografia
- 29. Quando si dovrebbero forzare gli aggiornamenti automatici?
- 30. Gli indirizzi IP e le porte dovrebbero essere considerati riservati?
La domanda non dovrebbe essere "Che cosa dovrebbe sapere ogni sviluppatore web sulla sicurezza"? La crittografia è solo una parte della tua domanda, giusto? –
nyylbharrqgbxabjnobhgrapelcgvbapnaorsbhaqguvegrrapunenpgrefnjnl – Instantsoup
ebg13vffghcvqnaqunfnofbyhgrylabcynprvanqvfphffvbapbirevatfrphevgl – NotMe