Pergunta

Algum tempo atrás eu entrei novo projeto. Ele estava em desenvolvimento por um longo tempo. A única coisa que me surpreendeu foi que todos os usuários senhas são armazenadas em forma não criptografada .

Expliquei enormes vulnerabilidades desse segurança para a nossa gestão - parece que eles concordam com isso e quer fazer o projeto mais seguro. Os membros da equipe concordam também.

Temos cerca de 20K usuários no sistema.

Na verdade, é muito estressante para fazer este trabalho - senhas a forma criptografada migre não-criptografada. Se algo der errado, pode levar ao desastre do projeto.

Como posso reduzir esse estresse? Cópia de segurança? Unidade-testes (testes integradores)?

Foi útil?

Solução

Bem, tenha cuidado com o seu backup porque ele conterá senhas do usuário não criptografadas: -)

Assumindo que as senhas são armazenadas em um banco de dados, uma solução fácil seria algo como isto:

1) Faça um backup seguro de toda a tabela de dados

2) Criar uma nova coluna (PasswordEncrypted ou nome similar)

3) usar uma consulta atualização para atualizar nova coluna de cada linha com um MD5 da senha não criptografada durante a utilização de um sal de 32 bytes ou maior. Praticamente todos os sistemas de banco de dados hoje tem uma função MD5 para que você não vai mesmo ter de deixar o seu SQL pronta

4) Mantenha a coluna de texto simples no ínterim e atualizar suas aplicações / scripts de acordo com o trabalho com a senha salgada.

5) Renomeie a coluna senha antiga texto simples para temporariamente tomar-lo fora de jogo e testar a sua aplicação- se houver algum problema, em seguida, voltar para a etapa 4 e corrigir seus erros.

6) Quando tudo está funcionando corretamente descartar a coluna de senha de texto

7) Incentive os usuários a escolher uma nova senha agora que você tem algum nível de segurança no local para mitigar os efeitos de quaisquer ataques anteriores que podem ter sido bem sucedido.

Outras dicas

Que tipo de projeto é esse? Uma aplicação web, aplicação desktop?

Se você estiver indo no caminho refatoração, há uma razão que as senhas precisam ser armazenados em reversível algo como criptografia? Em geral, é boa prática para hash de suas senhas com algo como SHA então hash a entrada com o mesmo algoritmo e comparar os resultados. Você só armazenar os valores hash, e não as senhas reais. Isso lhe dá a capacidade de verificar que alguém entrou a senha correta, sem expor seus usuários a possibilidade de sua criptografia que está sendo quebrado e suas senhas expostas.

Informações específicas sobre a sua abordagem não é algo que pode fornecer (desde que eu não sei como ele funciona), mas sua melhor aposta é para criar uma coluna adicional para armazenar as senhas hash, de hash as senhas existentes, em seguida, manter -los atualizados com as alterações de senha. Use esta nova coluna para todos os novos desenvolvimentos, em seguida, uma vez que o movimento está terminado e testado, excluir a coluna com as senhas em texto puro.

lotes de gravação de testes, que muitas teste de casos de canto (maiúsculas e minúsculas, números, símbolos, caracteres Unicode, senhas longas, etc). Quando você está desenvolvendo e testando, criar um sistema para voltar ao sistema antigo (fornecendo a lista de senha antiga, é claro, já que uma vez que as senhas são hash você não será capaz de convertê-los de volta diretamente). Salvar uma cópia da lista de senha atual. Converter as senhas mais em um banco de dados de arquivo de teste ou teste, e depois usar a salvo copiado das senhas para teste que tudo funcionou. Agora mova o sistema em produção, e verifique se ele funciona para os usuários. Se isso não acontecer, você já testou o plano para migrar de volta para o sistema antigo. Uma vez que tem sido demonstrado ao trabalho por um par de semanas, você pode excluir a lista de senhas em texto puro e você está tudo definido.

Gostaria apenas de hash as senhas atuais, armazená-los em um novo campo de banco de dados, e começar a usar esse campo ao excluir o campo de senha. Eu, então, notificar meus usuários que agora seria um bom momento para alterar senhas como você implementou mais mecanismos de segurança para manter seus dados seguros.

Para ter um backup, basta fazer SELECT * INTO Backup FROM UserData

Você pode obter confiança extra, executando ambos os métodos de autenticação (criptografados e não criptografados) para cada tentativa de login, e se conduzirem a um resultado diferente, obter um alerta de e-mail enviado a você. Esta mudança não é visível para os usuários, para que ele possa ser executado por semanas e até meses. Depois de ver que a velha ea nova autenticação funciona para uma porcentagem alta o suficiente de seus usuários, desativar o antigo.

Se possível, você pode tentar este: Enviar um e-mail a todos os seus usuários para atualizar suas senhas com um período de tempo limite, após o qual eles podem não funcionar se eles não mudam suas senhas. Hash estas novas senhas e armazenar o hash. Isso exigiria algumas mudanças na interface (ou seja, os dados que envia de volta).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top