Hoje, recebi uma pergunta do meu gerente, perguntando-me o que é considerado um design aceitável para autenticação de um aplicativo de formulário da web, especialmente no que diz respeito à natureza de muitos navegadores populares, para "Lembrar senha" nos campos de login típicos de senha de nome de usuário .
Estou tendo problemas para encontrar uma resposta que considero aceitável. À luz das falhas de segurança embaraçosas da Sony, eu realmente quero ter cuidado, mesmo que os dados armazenados nas pessoas sejam de menor sensibilidade. Não estamos armazenando números de segurança social nem endereços, no entanto, estamos armazenando números de telefone, endereços de e-mail e uma foto de um visitante.
Ele está preocupado com o fato de que um usuário possa simplesmente Lembrar Senha em um terminal público; então, alguém pode simplesmente pular nesse terminal e começar a visualizar ou modificar dados de maneira não autorizada. No entanto, estou bastante certo de que, pelo menos nas estações de trabalho do Windows, o navegador não "Lembrará senha" nas contas de usuário do Windows.
Além disso, estou implementando uma criptografia de senha unidirecional no servidor (armazene a senha criptografada no banco de dados, criptografe a senha fornecida pelo usuário no servidor, compare com a string criptografada do banco de dados). Não há planos imediatos para incorporar a criptografia SSL, mas isso ainda é uma opção.
Existem falhas importantes de segurança nessa abordagem? Você tem alguma sugestão melhor?
fonte
Respostas:
Algumas dicas de alto nível:
Minha sugestão para você seria obter um livro sobre a proteção de aplicativos da Web. Há informações demais para transmitir em uma única resposta / blog / artigo. O tópico da criptografia sozinho é substancial.
fonte
Você pode tentar sobrescrever o comportamento do navegador - alguns bons conselhos aqui:
/programming/32369/disable-browser-save-password-functionality
fonte
Eu diria que você deveria ficar bem.
A maioria dos usuários será inteligente o suficiente para não salvar sua senha em um terminal público, e as senhas serão armazenadas por perfil. Lembre-se de que eles poderiam escrevê-lo com facilidade em um lembrete ou usar uma senha fraca.
Se a página de login não for criptografada por SSL, não seria muito difícil para um invasor farejar essa senha enquanto viaja pela rede. No entanto, é um bom trabalho colocar a senha no banco de dados, impedindo que um invasor em potencial veja as senhas de todos (que eles poderiam usar com o endereço de email para tentar fazer logon em outros sites nos quais o usuário possa estar).
Se você ainda quiser, existem maneiras de desativar o comportamento do navegador, como Chad apontou. Eu só vi isso no site do meu banco e no sistema Live da Microsoft.
fonte
Em um determinado momento, você não pode (e não é obrigado legalmente) a proteger um usuário de si mesmo. A funcionalidade "Lembrar senha" pode ser arriscada, mas é um risco assumido pelo usuário. Da mesma forma, se o usuário decidir reutilizar sua senha para vários serviços, ele assumirá esse risco também. Também não é necessário avisá-los para não escreverem sua senha em um lembrete e colá-la no monitor, mesmo que os usuários também façam isso também.
Ou seja, até que alguém com êxito litigue e mude as regras. Consulte também: "Aviso: o conteúdo pode estar quente".
fonte
Não acho que você possa controlar com segurança se o navegador lembra ou não uma senha. Está simplesmente fora de suas mãos, independentemente de o navegador fazer isso ou não. Nem é necessariamente um enorme risco de segurança para você . Você sempre deve assumir que ataques podem ser feitos a partir de logins válidos. Não assuma, porque alguém tem um usuário / passe de login válido que não será bom. Afinal, existem muitas maneiras pelas quais as senhas podem cair nas mãos erradas.
Eu acho que o que você poderia fazer é aleatoriamente os nomes dos campos no seu formulário de login cada vez. Em vez de
<input name="username"
, use algo como<input name="user658667587"
. Isso tornaria os nomes de usuário em cache bastante inúteis. Mas não sei se a sobrecarga valeria a pena. Sem mencionar usuários inconvenientes que não estão em máquinas públicas.Se você estiver em uma situação extremamente sensível à segurança (bancos, investimentos), você pode simplesmente perguntar às pessoas durante o logon se é uma máquina pública. Você também pode armazenar em cache endereços IP conhecidos quando as pessoas fizerem login, e se elas fizerem login em um local diferente exigirem um número de PIN não digitado (por exemplo, clique nas imagens), além do passe / usuário normal. Meu banco faz algo parecido com isso.
fonte