Devo manter os endereços de email como texto sem formatação no banco de dados?

14

Está claro para todos ( espero ) que armazenar senhas sem pelo menos salgar / hash elas é uma péssima idéia.

E os emails? Digamos que você mantenha o endereço de e-mail da inscrição; se você o criptografar corretamente, talvez não seja possível enviar e-mails aos usuários. Por outro lado, se você não o criptografar e o banco de dados for roubado, todos os seus usuários correm o risco de um possível spam.

Esta pergunta não é sobre questões específicas da lei (embora possam ser apresentadas, permanecem dependentes do país) ou sobre a criptografia do próprio banco de dados.

Pierre Arlaud
fonte
Pense que você deve manter todas as informações pessoais identificáveis ​​de maneira segura. Trata-se de dados criptografados de que o aplicativo precisa (por exemplo, envie algum email de verificação) e dados de hash / salt usados ​​para autenticação (por exemplo, senha). Além disso, é claro, garantir a base de dados é obrigatório neste caso.
Ilan Huberman
Você pode configurar um aplicativo separado que armazena apenas email + senhas (+ outros dados privados), por exemplo. Você pode usar isso para enviar e-mails chamando-o, por exemplo, com uma API de descanso interna: localEmailServer / sendInvite / 123 em que 123 = ID do usuário. Você pode fazer o mesmo para fazer login, publicar em localEmailServer / login, que pode retornar verdadeiro ou falso. Dessa forma, seu aplicativo pode ser invadido, mas eles ainda não terão os endereços de email. Se você limitar a quantidade de solicitações para este serviço, ele estará mais protegido, pois você não estará vulnerável a coisas como injeções de SQL nesta parte.
Luc Franken

Respostas:

9

O armazenamento de um hash salgado dos endereços de email pode estar na opção se você mantiver esses registros apenas para confirmação / autenticação da conta.

Em outros casos, parece-me que criptografar os e-mails dificultaria a manutenção do banco de dados e ganharia pouco em troca.

Provavelmente, proteger o acesso ao próprio banco de dados é uma opção melhor: geralmente há muitas outras informações no banco de dados que você não gostaria de obter.


Uma pergunta semelhante no Stackoverflow: vale a pena criptografar endereços de email no banco de dados?

manlio
fonte
Não vi essa pergunta! Para o registro, é uma pergunta antiga, mas acredito que agora deve pertencer a programadores.SE.
Pierre Arlaud
3
@PierreArlaud: Na verdade, a coisa toda seria melhor em Segurança da Informação, pois ela realmente não tem nada a ver com programação.
Blrfl
Há um retorno na criptografia de e-mails, de fato. Se você não armazenar as chaves no mesmo banco de dados comprometido, privará o bandido de usar os emails. Lembre-se de que um email é muito usado para ativação de contas e alteração de credenciais.
precisa saber é o seguinte
2

Eu acho que você já disse tudo.

A única coisa em que consigo pensar é em não usar um filtro de hash unidirecional como o SHA1 para armazenar os endereços de email. Use alguma criptografia de chave pública (reversível) em seu aplicativo e verifique se sua chave privada está longe do banco de dados, para que não possam ser "roubadas" juntas.

Dessa forma, você ainda pode descriptografar os endereços de email para enviar emails,

Mawg diz que restabelece Monica
fonte
6
E? E? O suspense está me matando :)
Pierre Arlaud
E o que? O que é suspense? Criptografar (descriptografadamente) no seu aplicativo antes de armazená-lo no banco de dados não significa que o banco de dados seja roubado, hackeado, etc. ? Estou esquecendo de algo?
Mawg diz que restabelece Monica
2
Apenas um comentário sobre o último caractere da sua resposta: D
Pierre Arlaud
Estou tentando encontrar o que sua resposta diz que o manlio não fez. Basicamente, a idéia é ter um hash reversível do email, como um hash salgado. Ou talvez você tivesse algo completamente diferente em mente?
Pierre Arlaud
Desculpe, acho que enviamos praticamente ao mesmo tempo.
Mawg diz que restabelece Monica