Crittografia per i dati che devi decifrare: usa le variabili per impostare la chiave.
- Non registrare le query che contengono input dell'utente, esse conterranno i dati che stai crittografando. Se devi loggarlo, non dare ai privilegi di lettura dell'utente del database il log
- Non eseguire il database come utente privilegiato (ad es. sistema locale / root)
- Archivia la chiave separatamente dall'applicazione PHP e crea un'istanza della variabile all'avvio del database
- Cripta la chiave con un'altra chiave a cui solo la radice può accedere, openssl in bash è candidata a farlo. L'utente del database non deve avere accesso diretto alla chiave e alla chiave di crittografia della chiave.
Hash salati per i dati che devi solo verificare (password).
Salting è incredibilmente importante. Non riesco a sottolinearlo abbastanza. Usando un dispositivo relativamente economico (circa 2k) posso eseguire 100m hash al secondo nella maggior parte degli algos, un dispositivo di fascia più alta (~ 6k - principalmente usato per scopi industriali) Sono in grado di raggiungere più di 1,2 miliardi di hash al secondo (sha, md5, md4 ecc.) Se il tuo aggressore ha un FPGA, il patrimonio di migliaia di miliardi di supposizioni al secondo non è esagerato. Puoi visualizzare le statistiche qui
Usando John e il codice non ottimizzato, l'elenco Linkedin (hash senza sale) è stato indovinato @ ~ 70% utilizzando le regole di manomissione predefinite in meno di 24 ore ... Saltate i vostri Hash. Quando il tuo database è esposto, questo ti darà il tempo di informare i tuoi utenti di cambiare le loro password senza (necessariamente) comprometterne immediatamente l'accesso.
Non memorizzarlo se non ti serve.
So che questa non è direttamente la domanda, ma seriamente, è altrettanto importante. Supponendo che il tuo database sia compromesso a un certo punto, se non ha dati non può essere esposto.
Ultima: utilizza la sicurezza delle best practice per i database: convalida i tuoi dati, utilizza le stored procedure per l'elaborazione dei dati e controlla + verifica i log di accesso al database.