12 Melhores Práticas para Gerenciamento de Contas de Usuário, Verificação de Senhas e Autorização

Resultado de imagem para cloud user

Gerenciamento de conta, autorização e gerenciamento de senhas podem ser complicados. Para muitos desenvolvedores, o gerenciamento de contas é um canto escuro que não recebe atenção suficiente. Para gerentes de produtos e clientes, a experiência resultante muitas vezes não atende às expectativas.

Felizmente, o Google Cloud Platform (GCP) traz várias ferramentas para ajudá-lo a tomar boas decisões em torno da criação, gerenciamento seguro e autenticação de contas de usuários (neste contexto, qualquer pessoa que se identifique com seu sistema - clientes ou usuários internos). Se você é responsável por um site hospedado no Google Kubernetes Engine, uma API no Apigee, um aplicativo usando a Firebase ou outro serviço com usuários autenticados, esta publicação apresentará as melhores práticas para garantir que você tenha uma autenticação de conta segura, escalável e utilizável sistema.

1. Hash essas senhas.

Uma das regras mais importantes para o gerenciamento de contas é armazenar com segurança informações de usuários sensíveis, incluindo sua senha. Você deve tratar esses dados como sagrados e lidar com isso de forma adequada.

Não armazene senhas de texto claro em nenhuma circunstância. Seu serviço deve, em vez disso, armazenar um hash criptograficamente forte da senha que não pode ser revertida - criado com, por exemplo, PBKDF2, SHA3, Scrypt ou Bcrypt. O hash deve ser salgado com um valor exclusivo para essa credencial de login específica. Não use tecnologias de hashing obsoletas, como MD5, SHA1 e, em nenhuma circunstância, você deve usar criptografia reversível ou tentar inventar seu próprio algoritmo de hashing.

Você deve projetar seu sistema assumindo que ele será comprometido eventualmente. Pergunte a si mesmo: "Se meu banco de dados tivesse sido exibido hoje, a segurança e a segurança dos meus usuários estarão em perigo no meu serviço ou outros serviços que eles usam? O que podemos fazer para mitigar o potencial de danos em caso de vazamento?"

2. Permitir para provedores de identidade de terceiros, se possível.

Os provedores de identidade de terceiros permitem confiar em um serviço externo confiável para autenticar a identidade de um usuário. Google, Facebook e Twitter são provedores comumente usados.

Você pode implementar provedores de identidade externos ao lado do seu sistema de autenticação interno existente usando uma plataforma como Firebase Auth. Há uma série de benefícios que vêm com Firebase Auth, incluindo administração mais simples, menor superfície de ataque e um SDK multi-plataforma. Entraremos em mais benefícios ao longo desta lista. 


3. Separar o conceito de identidade do usuário e conta de usuário.

Seus usuários não são um endereço de e-mail. Eles não são um número de telefone. Eles não são a ID única fornecida por uma resposta OAUTH. Seus usuários são o ponto culminante de seus dados e experiência únicos e personalizados ao seu serviço. Um sistema de gerenciamento de usuários bem projetado tem baixo acoplamento e alta coesão entre diferentes partes do perfil de um usuário.

Mantendo os conceitos de conta de usuário e as credenciais separadas simplificará grandemente o processo de implementação de provedores de identidade de terceiros, permitindo aos usuários alterar seu nome de usuário e vincular múltiplas identidades a uma única conta de usuário. Em termos práticos, pode ser útil ter um identificador global interno para cada usuário e vincular seu perfil e identidade de autenticação através dessa identificação, em vez de empilhar tudo em um único registro.

4. Permitir que várias identidades se liguem a uma única conta de usuário.

Um usuário que autentica seu serviço usando seu nome de usuário e senha uma semana pode escolher o Google Sign-In no próximo sem entender que isso poderia criar uma conta duplicada. Da mesma forma, um usuário pode ter motivos muito bons para vincular vários endereços de e-mail ao seu serviço. Se você separou adequadamente a identidade e a autenticação do usuário, será um processo simples para vincular várias identidades a um único usuário.

O seu backend precisará explicar a possibilidade de um usuário se tornar parte ou todo o processo de inscrição antes de perceber que está usando uma nova identidade de terceiros não vinculada à sua conta existente no seu sistema. Isso é mais simplesmente alcançado perguntando ao usuário para fornecer um detalhe de identificação comum, como endereço de e-mail, telefone ou nome de usuário. Se esses dados correspondem a um usuário existente em seu sistema, exijam que eles também se autentiquem com um provedor de identidade conhecido e vincule o novo ID à sua conta existente.

5. Não bloqueie senhas longas ou complexas.

O NIST atualizou recentemente diretrizes sobre a complexidade e a força da senha. Como você é (ou será muito breve) usando um forte hash criptográfico para armazenamento de senha, muitos problemas são resolvidos para você. Hashes sempre produzirão uma saída de comprimento fixo, independentemente do comprimento de entrada, para que seus usuários possam usar senhas, desde que eles gostem. Você deve preencher o tamanho da senha, apenas faça isso com base no tamanho POST máximo permitido pelos seus servidores. Isso geralmente é bem acima de 1MB. Sério. 

Suas senhas de hash serão compostas por uma pequena seleção de caracteres ASCII conhecidos. Caso contrário, você pode facilmente converter um hash binário para Base64. Com isso em mente, você deve permitir que seus usuários usem literalmente os caracteres que eles desejam em sua senha. Se alguém quiser uma senha feita de Klingon, Emoji e caracteres de controle com espaço em branco em ambas as extremidades, você não deve ter nenhuma razão técnica para negá-los.


Resultado de imagem para google cloud security


6. Não imponha regras não razoáveis ​​para os nomes de usuário.

Não é razoável que um site ou serviço exija nomes de usuários com mais de dois ou três caracteres, bloqueie caracteres ocultos e evite espaços em branco no início e no final de um nome de usuário. No entanto, alguns sites passam ao mar com requisitos como um comprimento mínimo de oito caracteres ou bloqueando quaisquer caracteres fora das letras e números ASCII de 7 bits.

Um site com restrições estritas nos nomes de usuário pode oferecer alguns atalhos aos desenvolvedores, mas faz isso mas faz isso à custa de usuários e casos extremos vão afastar alguns usuários. 

Existem alguns casos em que a melhor abordagem é atribuir nomes de usuários. Se for esse o caso do seu serviço, assegure-se de que o nome de usuário atribuído seja fácil de usar na medida em que eles precisem lembrar e comunicá-lo. As identificações alfanuméricas devem evitar símbolos ambíguos visualmente, como "Il1O0". Você também é aconselhado a executar uma varredura de dicionário em qualquer string gerada aleatoriamente para garantir que não haja mensagens não intencionais incorporadas no nome de usuário. Essas mesmas diretrizes aplicam-se às senhas geradas automaticamente. 

7. Permitir que os usuários alterem seu nome de usuário. 

É surpreendentemente comum em sistemas legados ou em qualquer plataforma que forneça contas de e-mail para não permitir que os usuários alterem seu nome de usuário. Existem muito bons motivos para não liberar automaticamente nomes de usuários para reutilização, mas os usuários de longo prazo de seu sistema acabarão por apresentar uma boa razão para usar um nome de usuário diferente e provavelmente não vão querer criar uma nova conta.

 Você pode honrar o desejo de seus usuários de mudar seus nomes de usuário, permitindo alias e deixando seus usuários escolherem o alias principal. Você pode aplicar todas as regras de negócios que você precisa no topo desta funcionalidade. Algumas organizações só podem permitir uma mudança de nome de usuário por ano ou impedir que um usuário exiba qualquer coisa além de seu nome de usuário principal. Os provedores de e-mail podem garantir que os usuários estejam completamente informados sobre os riscos antes de separar um nome de usuário antigo de sua conta ou, talvez, proibir desvincular os nomes de usuários antigos inteiramente.

Escolha as regras corretas para sua plataforma, mas certifique-se de que eles permitem que seus usuários cresçam e mudem ao longo do tempo. . 

8. Deixe seus usuários excluir suas contas.

Um número surpreendente de serviços não possui meios de auto-atendimento para que um usuário exclua sua conta e dados associados. Há uma série de bons motivos para que um usuário feche uma conta permanentemente e exclua todos os dados pessoais. Essas preocupações precisam ser equilibradas em relação às suas necessidades de segurança e conformidade, mas a maioria dos ambientes regulados fornece diretrizes específicas sobre a retenção de dados. Uma solução comum para evitar problemas de conformidade e hackeamento é permitir que os usuários agendem sua conta para exclusão futura automática. 

Em algumas circunstâncias, você pode ser legalmente obrigado a cumprir o pedido de um usuário para excluir seus dados em tempo hábil. Você também aumenta sua exposição em caso de violação de dados onde os dados de contas "fechadas" são vazados.

9. Tomar uma decisão consciente sobre o comprimento da sessão.

 Um aspecto frequentemente negligenciado de segurança e autenticação é o comprimento da sessão. O Google dedica muito esforço para garantir que os usuários sejam quem eles dizem que são e verificarão com base em determinados eventos ou comportamentos. Os usuários podem tomar medidas para aumentar sua segurança ainda mais. 

Seu serviço pode ter uma boa razão para manter uma sessão aberta indefinidamente para fins de análise não críticos, mas deve haver limiares após os quais você pede senha, 2º fator ou outra verificação de usuário.

 Considere quanto tempo um usuário deve ser capaz de estar inativo antes de re-autenticar. Verifique a identidade do usuário em todas as sessões ativas se alguém executar uma reinicialização de senha. Solicite autenticação ou 2º fator se um usuário alterar os aspectos essenciais do seu perfil ou quando estiver executando uma ação sensível. 

Considere se é sensato proibir o logon de mais de um dispositivo ou local de cada vez. Quando seu serviço expira uma sessão de usuário ou requer re-autenticação, solicite ao usuário em tempo real ou forneça um mecanismo para preservar qualquer atividade que eles não foram salvo desde que foram autenticados pela última vez. É muito frustrante para um usuário preencher um formulário longo, enviá-lo algum tempo depois e descobrir que todos os seus dados foram perdidos e eles devem fazer login novamente.

10. Use a Verificação em 2 Passos. 

Considere o impacto prático em um usuário de ter sua conta roubada ao escolher os métodos de Verificação em 2 Passos (também conhecidos como autorização de 2 fatores ou apenas 2FA). O SMS 2FA auth foi reprovado pelo NIST devido a múltiplas fraquezas, no entanto, pode ser a opção mais segura que seus usuários aceitarão para o que consideram um serviço trivial. Ofereça a autenticação 2FA mais segura que você possa razoavelmente. Habilitar provedores de identidade de terceiros e acompanhar em seus 2FA é um meio simples para aumentar sua segurança sem grandes gastos ou esforço.

11. Tornar os insumos do ID do usuário insensíveis.

Seus usuários não se preocupam e nem sequer podem se lembrar do caso exato de seu nome de usuário. Os nomes de usuários devem ser completamente absurdos para maiúsculas e minúsculas. É trivial armazenar nomes de usuários e endereços de e-mail em todas as minúsculas e transformar qualquer entrada em minúscula antes de comparar. 

Os smartphones representam uma porcentagem cada vez maior de dispositivos de usuário. A maioria deles oferece autocorreção e capitalização automática de campos de texto simples. Prevenir esse comportamento no nível de UI pode não ser desejável ou completamente efetivo, e seu serviço deve ser robusto o suficiente para lidar com um endereço de e-mail ou nome de usuário que foi involuntariamente auto-maiúsculas.

12. Construa um sistema de autenticação seguro. 

Se você estiver usando um serviço como Firebase Auth, muitas preocupações de segurança são tratadas automaticamente para você. No entanto, seu serviço sempre precisará ser projetado corretamente para evitar abusos. As considerações principais incluem a implementação de uma redefinição de senha, em vez da recuperação de senha, registro detalhado da atividade da conta, limitação das tentativas de login, bloqueio de contas após muitas tentativas de login sem êxito e requerer autenticação de 2 fatores para dispositivos não reconhecidos ou contas que foram inativas por longos períodos. Há muitos mais aspectos para um sistema de autenticação seguro.

Resultado de imagem para google cloud security
Por Ian Maddox, GCP Solutions Architect