Antecedentes:
Soy parte de un equipo de desarrolladores que se ejecuta una aplicación web que almacena y recupera datos de HIPAA (médicos). Recientemente, las pautas de HIPAA se actualizaron para incluir una política que requiere que toda la información de identificación del cliente se encripte cuando está "en reposo" (almacenada en la base de datos y no se está accediendo).La sobrecarga de una función nativa de PHP para cifrar los datos de HIPAA
El problema inicial
El primer problema que tuvimos que hacer frente fue la determinación de la mejor manera bidireccional cifrar los datos de una manera que hace que los datos seguros en caso de incumplimiento.
la solución inicial
La solución más rápida que se nos ocurrió fue usar mcrypt para cifrar los datos antes de que lo insertó en la base de datos.
El nuevo problema
La aplicación que estamos desarrollando es bastante antiguo (como aplicaciones web van) y utiliza una gran cantidad de programación de procedimiento, así como la fuerte dependencia de la función mysql_query para insertar, actualizar, recuperar y borrar datos. No tenemos el tiempo ni el lujo de traducir nuestro código a una capa de abstracción de base de datos. Por lo tanto, la única forma de implementar este sistema de cifrado/descifrado es editar manualmente todas las consultas CRUD para usar datos cifrados a través del mcrypt. Esto es muy ineficiente y extremadamente propenso a errores.
Nuestra solución
propuesto Decidimos que la manera más rápida y más eficaz para resolver nuestro problema es sobrescribir la función nativa mysql_query con uno de nuestra propia invención. En nuestra nueva función, cifraríamos/descifraríamos los valores de los datos antes de enviar la consulta al servidor/devolver el conjunto de resultados.
Cuando usted gente vienen en
- ¿Es esta la mejor solución para resolver nuestro problema inicial?
- ¿Cómo se puede sobreescribir una función PHP central existente?
Así que el problema es para cifrar los datos, mientras que ha sido transferido al servidor de base de datos? ¿O almacenarlo de manera encriptada? –
Para almacenarlo de forma encriptada y luego recuperarlo, descifrarlo y mostrarlo fácilmente según sea necesario. –
Creo que puede estar haciendo esto en la capa incorrecta. ¿Consideró encriptar toda la base de datos MySQL? Algunas soluciones para esto se discuten en [esta pregunta] (http://stackoverflow.com/questions/143750/mysql-and-data-file-encryption). –