Come proteggere le e-mail in un database quando non è necessario inviare e-mail

1

Ho un sistema ipotetico in cui gli utenti inseriscono il loro indirizzo email e vengono inviati un collegamento occasionale a qualcosa o altro. Il sistema non ha bisogno di utilizzare gli indirizzi email dopo quel punto, ma deve garantire che un utente non esegua questa azione due volte con lo stesso indirizzo email. A tal fine, ho deciso di cancellare gli indirizzi e-mail in modo da avere un po 'meno di cui preoccuparsi, in termini di sicurezza 1 .

Sono pienamente consapevole che un semplice hash senza sale fornisce pochissima sicurezza reale rispetto a un hash di password come bcrypt, ma poiché si tratta solo di indirizzi e-mail e non di password, non penso che sarà molto problema.

Ho due domande:

  1. Quale algoritmo di hashing è più sicuro in questo contesto? (In particolare, senza usare un sale)
  2. Quali altre precauzioni possono essere adottate per salvaguardare gli indirizzi email degli utenti in caso di violazione dei dati?

1 Questo non significa che sarò pigro su altre aree. Ovviamente proteggerò queste informazioni come se fosse un testo in chiaro, ma una maggiore sicurezza è probabilmente migliore, vero?

    
posta ItsTimaiFool 08.08.2016 - 21:50
fonte

2 risposte

1

Potresti creare una soluzione globale per la tua applicazione (non archiviata nel database, ma nel codice stesso). Utilizza un hash piuttosto debole poiché non stai mirando a una sicurezza straordinaria. Ad esempio:

$globalSalt = 'ilovebananas123';

Ora, al momento della registrazione sarà simile a questo:

$email = $_POST["email"];

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

Ad esempio, quando si utilizza l'infrastruttura cloud:

  1. Utilizzerai AWS Lambda o Google Funzioni per avere la funzione di controllare l'e-mail

  2. Creerai una raccolta isolata di dati come DynamoDB, Google DataStore o qualsiasi cosa che si adatti al tuo scenario di utilizzo

In questo modo lo hai isolato dal resto mantenendo il prezzo basso. Questo è un ottimo modello in quanto è molto veloce, sicuro e molto economico.

Se non si utilizza il cloud, è sufficiente creare il servizio EmailChecker a cui è possibile accedere tramite API e quindi creare il database delle e-mail a cui è consentito l'accesso solo a EmailChecker. È possibile utilizzare una piccola macchina virtuale per eseguire il provisioning. Avrebbe una politica che consente solo l'esecuzione del servizio (a parte il sistema operativo). E poi il database o la raccolta avrebbe credenziali dedicate.

Quindi, se qualcuno accede alla tua applicazione tramite SQL injection e riesce a scaricarlo tutto, non ci saranno indirizzi e-mail poiché puoi assicurarti che il tuo servizio EmailChecker non abbia SQL Injection e accetta solo richieste HTTPS ben formattate non ha cose come la serializzazione integrata nei gestori HTTP.

    
risposta data 09.08.2016 - 00:02
fonte

Leggi altre domande sui tag