2011-01-14 8 views
6

Stiamo memorizzando dati sensibili in MySQL e voglio utilizzare AES_ENCRYPT (dati, 'my-secret-key-here') e quindi AES_DECRYPT che funziona alla grande. La mia più grande domanda è come posso proteggere la chiave? In precedenza ho appena eri memorizzare la chiave in un file PHP web, in modo da qualcosa come:Come memorizzare in modo sicuro i dati in MySQL utilizzando AES_ENCRYPT

define("ENCRYPTION_KEY", 'my-secret-key-here'); 

Questo in realtà non funziona, però, come il nostro server MySQL e server web sono la stessa macchina fisica, quindi se qualcuno ottiene l'accesso al server, possono ottenere sia i dati crittografati memorizzati in MySQL che la chiave.

Qualche idea? Sto pensando di dover spostare la chiave su un server separato e leggerla da remoto. Oppure, per quanto riguarda la generazione dinamica della chiave di crittografia per ogni parte di dati. Ad esempio prendendo il customer_id e eseguendo md5 su di esso, e quindi usando quello come chiave.

risposta

0

Inserire la chiave segreta in un file, modificare il proprietario del file sullo stesso utente del server Web. Rimuovi tutte le autorizzazioni sul file per il gruppo e tutti gli altri.

C'è una domanda simile su Superuser (https://superuser.com/questions/139393/linux-file-permissions-access-control-query) - Sono sicuro che potresti ottenere un aiuto migliore laggiù, o solo su Google per ulteriori informazioni sui permessi dei file sul sistema che stai utilizzando.

+0

Potresti dirci quali sarebbero le autorizzazioni specifiche per i file? – mozgras

0

Un paio di opzioni:

  1. salvare la chiave di decrittazione in un file con autorizzazioni appropriate
  2. Se davvero si vuole memorizzare la chiave fuori sede, "montare" un disco da una macchina diversa. Avresti comunque bisogno di impostare correttamente i permessi.

La riga inferiore è che la password principale deve essere accessibile al server, il che significa che non è possibile completarla completamente. Il meglio che puoi fare è impostare le autorizzazioni utente/gruppo su di esso e assicurarsi che sia fuori dalla web root.

Se non si ha la necessità di decodificare il valore in testo semplice (ad esempio se si confrontano valori come una password), considerare l'uso di un hash.

Problemi correlati