Background:
faccio parte di un team di sviluppatori che esegue un'applicazione web che memorizza e recupera i dati HIPAA (medici). Recentemente, le linee guida HIPAA sono state aggiornate per includere un criterio che richiede che tutte le informazioni identificative dei client vengano crittografate quando sono "a riposo" (memorizzate nel database e non accessibili).Il sovraccarico di una funzione PHP nativa per crittografare i dati per la conformità HIPAA
il problema iniziale
Il primo problema che abbiamo dovuto affrontare è stato determinare il modo migliore per bidirezionale crittografare i dati in un modo che rende i dati sicuri in caso di violazione.
soluzione iniziale
La soluzione più veloce siamo arrivati a era quello di utilizzare mcrypt per crittografare i dati prima di abbiamo inserito nel database.
il nuovo problema
L'applicazione che stiamo sviluppando è piuttosto vecchio (come le applicazioni web Go) e usa un sacco di programmazione procedurale, così come forte dipendenza della funzione mysql_query per inserire, aggiornare, recuperare, e cancella i dati Non abbiamo il tempo o il lusso di tradurre il nostro codice in un livello di astrazione del database. Quindi, l'unico modo per implementare questo sistema di crittografia/decrittografia è quello di modificare manualmente tutte le query CRUD per utilizzare i dati che sono stati crittografati tramite mcrypt. Questo è molto inefficiente ed estremamente soggetto a errori.
La nostra Soluzione proposta
Abbiamo deciso che il modo più veloce ed efficace per risolvere il nostro problema è quello di sovrascrivere la funzione nativa mysql_query con uno dei nostri stessi concepite. Nella nostra nuova funzione, cripteremo/decodificheremo i valori dei dati prima di inviare la query al server/restituire il set di risultati.
Where You gente venire in
- È questa la soluzione migliore per risolvere il nostro problema iniziale?
- Come si fa a sovrascrivere una funzione PHP di base esistente?
Quindi il problema è di crittografare i dati mentre è stato trasferito al DB server? O memorizzarlo in modo criptato? –
Per memorizzarlo in modo crittografato, quindi recuperarlo, decrittografarlo e visualizzarlo secondo necessità. –
Penso che potresti farlo al livello sbagliato. Hai preso in considerazione la crittografia dell'intero database MySQL? Alcune soluzioni per questo sono discusse in [questa domanda] (http://stackoverflow.com/questions/143750/mysql-and-data-file-encryption). –