Cómo proteger los correos electrónicos en una base de datos cuando no necesita enviar correos electrónicos

1

Tengo un sistema hipotético en el que los usuarios ingresan su dirección de correo electrónico, y se les envía un enlace único a una cosa u otra. El sistema no necesita usar las direcciones de correo electrónico después de ese punto, pero debe asegurarse de que un usuario no realice esta acción dos veces con la misma dirección de correo electrónico. Con ese fin, he decidido agrupar las direcciones de correo electrónico solo para tener un poco menos de qué preocuparme, en cuanto a seguridad 1 .

Soy plenamente consciente de que un hash simple sin sal proporciona muy poca seguridad real en comparación con un hash de contraseña como bcrypt, pero como se trata solo de direcciones de correo electrónico y no de contraseñas, no creo que eso sea mucho. problema.

Tengo dos preguntas:

  1. ¿Qué algoritmo de hash es más seguro en este contexto? (Específicamente, sin usar una sal)
  2. ¿Qué otras precauciones se pueden tomar para proteger las direcciones de correo electrónico de los usuarios en caso de una violación de datos?

1 Esto no significa que sea perezoso en otras áreas. Obviamente, protegeré esta información como si fuera texto simple, pero probablemente haya más seguridad, ¿no?

    
pregunta ItsTimaiFool 08.08.2016 - 21:50
fuente

2 respuestas

1

Puedes crear un Salt global para tu aplicación (no se almacena en la base de datos, sino en el propio código) y utiliza un hash bastante débil, ya que no estás realmente apuntando a una seguridad asombrosa. Por ejemplo:

$globalSalt = 'ilovebananas123';

Ahora, en el registro se verá algo como esto:

$email = $_POST["email"];

$emailHash = sha1($email . $globalSalt);
// search the database for this hash.
// if no result was found, the email is unique!
    
respondido por el Tom 08.08.2016 - 23:04
fuente
0

Por ejemplo, cuando se usa infraestructura en la nube:

  1. Usaría AWS Lambda o Google Functions para tener la función de revisar el correo electrónico

  2. Crearía una colección aislada de datos como DynamoDB, Google DataStore o cualquier cosa que se ajuste a su escenario de uso

De esta manera, lo tiene aislado del resto mientras mantiene el precio bajo. Este es un modelo muy bueno ya que lo tienes muy rápido, seguro y muy barato.

Si no usa la nube, simplemente creará el servicio EmailChecker al que puede acceder a través de la API, y luego creará la base de datos de Emails a la que solo tiene acceso EmailChecker. Puedes usar una pequeña máquina virtual para aprovisionarla. Tendría una política que permitiera la ejecución del servicio únicamente (aparte del sistema operativo). Y entonces la base de datos o la colección tendrían credenciales dedicadas.

Entonces, si alguien piratea su aplicación a través de la inyección SQL y se las arregla para volcarlo todo, no habrá direcciones de correo electrónico, ya que puede asegurarse de que su servicio EmailChecker no tenga una Inyección SQL y acepte también solicitudes HTTPS bien formateadas. no tiene cosas como la serialización incorporada en los controladores HTTP.

    
respondido por el Aria 09.08.2016 - 00:02
fuente

Lea otras preguntas en las etiquetas