2009-08-03 9 views
42

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?

+16

La domanda non dovrebbe essere "Che cosa dovrebbe sapere ogni sviluppatore web sulla sicurezza"? La crittografia è solo una parte della tua domanda, giusto? –

+9

nyylbharrqgbxabjnobhgrapelcgvbapnaorsbhaqguvegrrapunenpgrefnjnl – Instantsoup

+0

ebg13vffghcvqnaqunfnofbyhgrylabcynprvanqvfphffvbapbirevatfrphevgl – NotMe

risposta

27

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.

+1

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

+6

@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ì. –

+1

L'hashing è quasi inutile senza sale; fai una ricerca su Google per "tavole arcobaleno" su come gli hash non salati possono essere facilmente compromessi. –

0

In primo luogo si deve familiarizzare con questo metodi php:

Here avete tutte le estensioni di crittografia in PHP.

+2

md5 è così rotto al giorno d'oggi, a causa delle tavole arcobaleno. – Macha

+2

Questo è un po 'esagerato. Basta aggiungere un sale e il tavolo dell'arcobaleno è inutile. –

+3

Sono state trovate collisioni MD5. Nessuno ha ancora dimostrato alcuna collisione SHA1. –

6

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

  1. Developer's Guide to Web Application Security
  2. Web Security Testing Cookbook
  3. Applied Cryptography
11

Che può essere rotto, non importa quello che fai.

+6

+1 e la verità nella maggior parte dei casi è che scrivere la tua routine è una mossa stupida. – Fredrik

+0

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. –

17

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)

15
  • 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à
14
+2

Vuoi dire, come, l'account yahoo di Ms Palin? – Smandoli

+1

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

+0

@ 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. –

3

Si prega di prestare attenzione ai seguenti punti quando si memorizzano le password,

  1. 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.

  2. 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.

  3. 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.

  4. 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.

+0

"Per favore aggiungi un nonce non ricorrente all'hash" - Intendi un sale? – hannson

+0

Il sale si riferisce normalmente all'aggiunta di qualsiasi cosa all'hash. Nonce è un tipo di ordinamento che può essere utilizzato solo una volta. –

+0

Nonce ?! Questo è un concetto piuttosto sfortunato. – UpTheCreek

1

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.

1

Se stai cercando la cosa da un contesto PHP, vi consiglio questo libro:

alt text http://ecx.images-amazon.com/images/I/51sKhc8YUlL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

Pro PHP Security on Amazon

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.

Problemi correlati