Português (Portugal)
  • segurança
  • identidade
  • lista
  • autenticação

A lista de segurança essencial para a identidade do usuário

Construir a identidade do usuário é um componente crítico de qualquer aplicação. Validar nomes de usuários e senhas pode parecer a abordagem mais simples, mas há muitos outros aspectos a considerar.

Gao
Gao
Founder

Introdução

Construir a identidade do usuário é um componente crítico de qualquer aplicação. Ele permite que você forneça experiências personalizadas, aumente a qualidade dos dados e melhore a retenção de usuários.

Validar nomes de usuários e senhas pode parecer a abordagem mais simples, mas há muitos outros aspectos a considerar. Vamos começar!

Infraestrutura

Imponha HTTPS

Vamos começar com o básico. Sempre imponha o uso do HTTPS (Hypertext Transfer Protocol Secure) para criptografar a transmissão de dados pela internet. O HTTPS garante que os dados trocados entre o dispositivo do usuário e o seu servidor permanecem confidenciais e à prova de adulteração.

Configurar HTTPS pode parecer desafiador, mas há muitas ferramentas e serviços disponíveis para ajudar você:

  • Se você está auto-hospedando, o Let's Encrypt oferece certificados gratuitos SSL/TLS que podem ser usados para habilitar HTTPS no seu site.
  • Se você está usando um provedor de nuvem, como AWS, Azure ou Google Cloud, você pode usar seus serviços gerenciados para configurar o HTTPS.

Não permita acesso público ao banco de dados, limite apenas a fontes confiáveis

Embora também possa parecer básico, já ocorreram inúmeras violações de segurança devido à permissão de acesso público a bancos de dados. Então, vale a pena mencionar aqui.

Sempre se lembre de nunca permitir o acesso público ao seu banco de dados. Coloque seu banco de dados numa rede privada e só permita acesso de fontes confiáveis.

Gerencie com segurança os tokens privados

Tokens privados, como tokens de acesso ou chaves de API, são frequentemente usados para fins de autenticação e autorização programática. Para gerenciar esses tokens com segurança:

  • Use tokens de curta duração e tokens de atualização para minimizar o risco de acesso não autorizado.
  • Use um mecanismo de armazenamento de tokens seguro, como um cofre de chaves, para proteger os tokens contra acesso não autorizado.
  • Rode os tokens regularmente para evitar que sejam comprometidos. Alguns protocolos, como o OAuth 2.0, fornecem um mecanismo para a rotação de tokens.
  • Mantenha controle sobre a revogação de tokens em caso de uma violação de segurança.

Escolha com sabedoria um algoritmo de hash de senha

Se você tem experiência com hashing de senha, você deve saber que existem muitos algoritmos disponíveis, alguns dos quais não são mais considerados seguros, como MD5, SHA-1 e SHA-2.

Alguns motivos comuns para sua insegurança são:

  • Eles não foram especificamente projetados para o hash de senhas, e sua velocidade computacional é muito rápida, facilitando ataques de força bruta.
  • Eles não fazem uso de sal, o que facilita a criação de tabelas do arco-íris para eles.
  • Eles são suscetíveis a ataques de colisão, permitindo que os invasores gerem senhas diferentes com o mesmo valor de hash.

Algoritmos de hash de senha padrão da indústria, como bcrypt e Argon2, foram projetados para resolver esses problemas. Devido ao escopo limitado deste artigo, não entraremos em detalhes sobre eles. Veja A evolução do hash de senha para aprender mais.

Aprenda e siga estritamente os padrões abertos

Padrões abertos como OAuth 2.0 e OpenID Connect (OIDC) fornecem abordagens seguras e padronizadas para autenticação e autorização de usuários. Eles têm sido testados em batalha e amplamente adotados pela indústria.

No entanto, implementá-los incorretamente pode levar a vulnerabilidades de segurança, mesmo para grandes equipes com desenvolvedores experientes. Um exemplo recente é a vulnerabilidade do OAuth descoberta no Expo, um popular framework para a construção de aplicativos móveis. Ele serve como um bom exemplo de como um pequeno erro pode resultar numa violação de segurança.

Criptografe os dados em repouso

Dados em repouso, como informações de usuário armazenadas ou backups de banco de dados, devem ser criptografados usando um algoritmo de criptografia forte. Isto garante que mesmo que os dados sejam comprometidos, eles não podem ser lidos sem a chave de decriptação. Verifique se o seu provedor de nuvem suporta este recurso, pois é comumente requerido para fins de conformidade.

Configure firewalls

Ataques DDoS (Distributed Denial of Service), embora antigos, continuam sendo uma ameaça significativa. De acordo com o relatório de ameaças de DDoS da Cloudflare para o 4º trimestre de 2022, a quantidade de tráfego de ataque DDoS HTTP aumentou 79% YoY. Em vez de construir sua própria solução, é uma boa ideia configurar firewalls gerenciados e utilizar notificadores para mitigar esse risco.

Apps e clientes

Melhore o nível de segurança para clientes públicos

Clientes públicos, como aplicativos móveis ou aplicações de uma única página, são mais suscetíveis a vulnerabilidades de segurança. Mesmo que você os forneça, você deve tratá-los como fontes não confiáveis no seu modelo de segurança. Por exemplo:

Nunca confie em dados de entrada públicos

A entrada de usuário pode ser uma fonte significativa de vulnerabilidades de segurança, muitas vezes negligenciada. Alguns tipos comuns de vulnerabilidades negligenciadas são Cross-Site Scripting (XSS) e SQL Injection. Certifique-se de validar e higienizar todos os dados de entrada do usuário antes de usá-los.

Mantenha o controle das atividades

Manter um registro de auditoria das atividades dos usuários ajuda a detectar e investigar incidentes de segurança. Registre e monitore ações do usuário, como tentativas de login, mudanças de senha, ou operações sensíveis. Analisar estes logs pode proporcionar insights valiosos sobre possíveis violações de segurança ou atividades suspeitas.

Implemente uma autenticação sólida

Implemente um forte mecanismo de autenticação para verificar a identidade dos usuários. Como mencionado anteriormente, considere o uso de protocolos seguros como OAuth 2.0 ou OpenID Connect para autenticação. Para obter mais informações, você pode se referir a CIAM 101: Autenticação, Identidade, SSO.

Construa uma autorização sólida (por exemplo, Implemente Controle de Acesso Baseado em Funções)

Além da autenticação, devem estar em vigor mecanismos de autorização adequados. Implemente o Controle de Acesso Baseado em Funções (RBAC) para garantir que os usuários só tenham acesso aos recursos e ações que estão autorizados a executar. Para obter mais informações, você pode se referir a CIAM 102: Autorização e Controle de Acesso Baseado em Funções.

Implemente Autenticação Multi-Fator (MFA)

A Autenticação Multi-Fator (MFA) adiciona uma camada extra de segurança ao exigir que os usuários forneçam uma ou várias formas de identificação, como uma senha e um código único enviado para o seu dispositivo móvel. Outro bom exemplo de MFA é quando o GitHub pede aos usuários para inserir um código único do seu aplicativo móvel, que é exibido na página web, para executar operações sensíveis como a exclusão de um repositório.

No entanto, ter um MFA não é uma necessidade para a maioria das startups iniciais, especialmente se você não tem uma solução pronta para o uso. Pode ser excessiva e impactar negativamente a experiência do usuário.

Cultura

O conselho fornecido acima cobre principalmente medidas de segurança "passivas", que são conhecidas antes de ocorrer um incidente de segurança. No entanto, há também medidas de segurança "ativas" que você pode tomar para melhorar sua postura de segurança geral, que são mais efetivas a longo prazo.

Eduque sua equipe e usuários sobre phishing e engenharia social

Ataques de phishing e engenharia social são críticos porque podem tornar muitas das medidas de segurança mencionadas acima inúteis. Por exemplo, se um usuário é enganado para entregar sua senha ou clicar numa imagem aparentemente inocente de um gato que contém malware, a força do seu algoritmo de hash de senha ou as regras do seu firewall tornam-se irrelevantes.

A maioria das pessoas acha o treinamento de segurança chato, e muitas vezes é. Portanto, mude a maneira como você educa sua equipe e usuários. Por exemplo, você pode simular um e-mail de phishing antes que um invasor real o faça e demonstrar como identificá-lo. Você pode até oferecer recompensas para relatar o e-mail à equipe de segurança.

Configure o DevSecOps

Além das revisões de segurança manuais, você pode também implementar práticas de DevSecOps para automatizar verificações de segurança. Por exemplo, você pode configurar um pipeline CI/CD para executar ferramentas de análise de código estático, como CodeQL, e executar automaticamente testes de penetração usando ferramentas como OWASP ZAP.

Adote a configuração mais rigorosa sem impactar a experiência do usuário

Quando se trata de segurança, sempre opte pela configuração mais segura que não impacte negativamente a experiência do usuário. Evite tomar atalhos ou comprometer a segurança por conveniência. A segurança deve ser sempre uma prioridade.

Como uma startup ou desenvolvedor independente, você pode sentir que lack você os recursos necessários para implementar estas medidas. No entanto, existem serviços de segurança profissional disponíveis que oferecem opções gratuitas ou amigáveis para as startups. Reserve um tempo para revisar e considerar a utilização deles.

Conclusão

Segurança é um tema complexo, e é impossível cobrir tudo num único artigo. Esperamos que este artigo tenha ajudado você a construir um senso de segurança mais forte para você ou sua equipe. Se você está construindo um novo aplicativo, você também pode querer conferir Logto, uma plataforma que ajuda você a desenvolver, gerenciar e garantir as identidades dos usuários do seu produto com esforço mínimo.