Guardar información personal (nombre, dirección, teléfono, correo electrónico) en la base de datos MySQL

4

Voy a crear una aplicación web para que las personas se registren y paguen una membresía. Toda la información de la transacción se procesará a través de Authorize.NET, pero guardamos el resto de la información (Nombre, Tipo de membresía, Cantidad, Correo electrónico, Dirección, Teléfono) sobre la transacción en MySQL para que pueda procesarse a través de una interfaz de administración.

Estoy pensando en usar AES_Encrypt para guardar la información en un servidor mysql seguro y luego usar AES_Decrypt para generar la información a través de una interfaz de administración para su procesamiento.

La idea es que el servidor web donde se realizará el regalo (seguro) sea diferente al servidor mysql donde se almacenará la información y la interfaz de administración que accede a la información también estará en un servidor diferente.

Mi pregunta es: ¿parece esto un enfoque sólido? ¿Hay algo mejor que deba hacer para cifrar esta información en caso de que se haya comprometido?

    
pregunta rmlumley 15.12.2015 - 21:53
fuente

2 respuestas

4

Lamento decepcionarte, pero tu modelo de seguridad no funciona en la realidad. Permítame explicarlo usando un flujo de trabajo de ejemplo de un usuario que edita su perfil.

  1. El usuario inicia sesión, navega a su página de perfil e ingresa sus datos para guardarlos.
  2. Al guardar, necesita su clave simétrica para AES. Esto puede ser ya sea una contraseña global, en uso para todos los datos privados en su servidor o una contraseña propiedad del usuario que contiene su contraseña en algún momento (ya que todos los demás datos están disponibles / almacenados públicamente)

2a: Contraseña global

Siempre será fácil comprometer el uso de una contraseña global, sin importar dónde la almacenes. Supongamos que su servidor solicita la contraseña global de un segundo servidor (que también puede ser comprometido) siempre que un usuario (administrador o no) acceda a ella. Esto se puede detectar fácilmente ya que un atacante conoce su punto final interno. Si lo codificas, puedes leerlo fácilmente.

2b: Contraseña propiedad del usuario

Esto debe contener una información tan secreta que nadie con acceso al servidor puede leerla, como la contraseña (ya que se supone que solo se almacena dentro de un hash). De esta manera el usuario podría leer & guarde sus datos privados, pero usted, como administrador, tendrá la misma oportunidad que un atacante y no podrá leerlos ni editarlos.

¿Y ahora qué?

Es tan simple como decepcionante: un atacante siempre tiene la misma cantidad de posibilidades que usted (el administrador), por lo que no hay manera de guardar los datos perfectamente guardados en cualquiera de ellos. Lo que se debe hacer como una práctica recomendada es el concepto de necesidad de saber : solo guarde los datos que realmente necesita que su servicio esté disponible en todo momento, como su correo electrónico, nombre y fecha de nacimiento. Todos los demás datos pueden guardarse y cifrarse con un token de propiedad del usuario y usarse en tiempo de ejecución (¡solo!) Para descifrar los datos para ofrecerlos al usuario como su dirección para un proceso de compra. Esto reducirá sus posibilidades con respecto al análisis de datos, pero la seguridad de los datos y el análisis amplio nunca se agradarán entre sí de todos modos.

    
respondido por el James Cameron 18.12.2015 - 00:03
fuente
-1

Si almacena Información confidencial del cliente, asegúrese de mantener el posible Riesgo de perder a muchos Informaciónes confidenciales a la vez bastante bajos. En general, es una buena idea consultar las Reglas de normalización de la base de datos, por ejemplo, en su caso, crearía una Base de datos con una ID y un Nombre como clave principal y agregaría las ID de las Tablas Correo, Dirección y Teléfono, y también el Tipo de membresía como clave extranjera.

Ejemplo:

TBL_Customerdata Nombre de ID FK_ID_Mail FK_ID_Address FK_ID_Phone FK_ID_Membership

TBL_Membership FK_ID_Membership Type Amount

TBL_Phone Número de teléfono FK_ID

TBL_Address FK_ID_Address Street House Housepart FK_ID_PoSt País

TBL_Post FK_ID_PoSt Ciudad del código postal

TBL_Mail FK_ID_Mail Adress FK_ID_Provider

TBL_Provider

FK_ID_Provider Provider

Si usa el Esquema anterior, evitaría que un atacante acceda a muchos Datapieces a la vez. AES parece estar bien para el cifrado.

Espero que esto ayude.

    
respondido por el mein-EDV-Blog.de 17.12.2015 - 23:31
fuente

Lea otras preguntas en las etiquetas