A lista de segurança essencial para a identidade do usuário
A construção da identidade do usuário é um componente crítico de qualquer aplicação. Validar nomes de usuário e senhas pode parecer a abordagem mais simples, mas há muitos outros aspectos a serem considerados.
Introdução
A construção da identidade do usuário é um componente crítico de qualquer aplicação. Isso permite que você forneça experiências personalizadas, melhore a qualidade dos dados e melhore a retenção do usuário.
Validar nomes de usuário e senhas pode parecer a abordagem mais simples, mas há muitos outros aspectos a serem considerados. Vamos começar!
Infraestrutura
Exigir HTTPS
Vamos começar pelo básico. Sempre impõe o uso de HTTPS (Protocolo Seguro de Transferência de Hipertexto) para criptografar a transmissão de dados pela internet. O HTTPS garante que os dados trocados entre o dispositivo do usuário e seu servidor permaneçam confidenciais e à prova de adulterações.
Configurar o HTTPS pode parecer desafiador, mas existem muitas ferramentas e serviços disponíveis para ajudá-lo:
- Se você está hospedando por conta própria, o Let's Encrypt oferece certificados SSL / TLS gratuitos que podem ser usados para habilitar o HTTPS em 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, restrito apenas a fontes confiáveis
Embora possa parecer básico também, houve inúmeras violações de segurança devido ao acesso público a bancos de dados. Então vale a pena mencionar isso aqui.
Sempre lembre de nunca permitir o acesso público ao seu banco de dados. Coloque seu banco de dados em uma rede privada e permita acesso apenas de fontes confiáveis.
Gerencie tokens privados de maneira segura
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 de forma segura:
- Use tokens de curta duração e tokens de atualização para minimizar o risco de acesso não autorizado.
- Use um mecanismo seguro de armazenamento de tokens, como um cofre de chaves, para proteger os tokens de acesso não autorizado.
- Rode regularmente os tokens para evitar que sejam comprometidos. Alguns protocolos, como o OAuth 2.0, fornecem um mecanismo para rotação de token.
- Mantenha controle sobre a revogação de tokens em caso de violação de segurança.
Escolha um algoritmo de hash de senha com sabedoria
Se você tem experiência com hash de senha, pode estar ciente de que existem muitos algoritmos disponíveis, alguns dos quais não são mais considerados seguros, como MD5, SHA-1 e SHA-2.
Algumas razões comuns para sua insegurança são:
- Eles não foram projetados especificamente para hash de senha e sua velocidade computacional é muito rápida, facilitando ataques de força bruta.
- Eles não usam sal, o que torna mais fácil criar tabelas de arco-íris para eles.
- São suscetíveis a ataques de colisão, permitindo que invasores gerem diferentes senhas com o mesmo valor de hash.
Algoritmos de hash de senha padronizados pela indústria, como bcrypt e Argon2 foram projetados para lidar com essas questões. 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 adira estritamente aos 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 foram 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 OAuth descoberta no Expo, uma framework popular para criar aplicativos móveis. Ele serve como um bom exemplo de como um pequeno erro pode resultar em uma violação de segurança.
Criptografar 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. Isso garante que mesmo que os dados sejam comprometidos, eles não possam ser lidos sem a chave de descriptografia. Verifique se seu provedor de nuvem suporta esse recurso, pois é comumente necessário para fins de conformidade.
Configurar firewalls
Os ataques DDoS (Distribuited Denial of Service), embora antigos, continuam sendo uma ameaça significativa. De acordo com o relatório de ameaça DDoS da Cloudflare para 2022 Q4, 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.
Aplicativos e clientes
Melhore o nível de segurança para clientes públicos
Clientes públicos, como aplicativos móveis ou aplicações de página única, 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 em seu modelo de segurança. Por exemplo:
- Se você está usando OAuth 2.0, use Proof Key for Code Exchange (PKCE) para proteger contra ataques de interceptação de código de autorização.
- Aplique Content Security Policy (CSP) para mitigar certos tipos de ataques, incluindo Cross-Site Scripting (XSS) e ataques de injeção de dados.
Nunca confie em dados de entrada públicos
A entrada do usuário pode ser uma fonte significativa de vulnerabilidades de segurança, muitas vezes ignoradas. Alguns tipos comuns de vulnerabilidades ignoradas 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.
Acompanhe as atividades
Manter um registro de auditoria das atividades do usuário ajuda na detecção e investigação de incidentes de segurança. Registre e monitore ações do usuário, como tentativas de login, alterações de senha ou operações sensíveis. Analisar esses registros pode fornecer insights valiosos sobre possíveis violações de segurança ou atividades suspeitas.
Implemente autenticação sólida
Implemente um mecanismo de autenticação forte para verificar a identidade dos usuários. Como mencionado anteriormente, considere usar protocolos seguros como OAuth 2.0 ou OpenID Connect para autenticação. Para mais informações, você pode consultar CIAM 101: Autenticação, Identidade, SSO.
Construa autorização sólida (por exemplo, Implemente Controle de Acesso Baseado em Funções)
Além da autenticação, os mecanismos de autorização adequados devem estar em vigor. Implemente o Controle de Acesso Baseado em Funções (RBAC) para garantir que os usuários tenham acesso apenas aos recursos e ações que estão autorizados a executar. Para mais informações, você pode consultar CIAM 102: Autorização e Controle de Acesso Baseado em Funções.
Implemente autenticação multifator (MFA)
A autenticação multifator (MFA) adiciona uma camada extra de segurança exigindo que os usuários forneçam um ou vários formulários de identificação, como uma senha e um código de uso único enviado para seu dispositivo móvel. Outro bom exemplo de MFA é quando o GitHub pede aos usuários que insiram um código de uso único de seu aplicativo móvel, que é exibido na página da web, para realizar operações sensíveis como excluir 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 uso. Pode ser excessivo e impactar negativamente a experiência do usuário.
Cultura
Os conselhos fornecidos acima cobrem principalmente medidas de segurança "passivas", que são conhecidas antes que um incidente de segurança ocorra. No entanto, também existem medidas de segurança "ativas" que você pode tomar para melhorar sua postura de segurança geral, que são mais eficazes a longo prazo.
Eduque sua equipe e usuários sobre phishing e engenharia social
Os ataques de phishing e a 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 for enganado para dar sua senha ou clicar em uma foto aparentemente inocente de um gato que contém malware, a força do seu algoritmo de hash de senha ou regras de firewall se tornam irrelevantes.
A maioria das pessoas acha o treinamento de segurança entediante, 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 por denunciar o e-mail para a equipe de segurança.
Configurar DevSecOps
Além de revisões de segurança manuais, você também pode implementar práticas de DevSecOps para automatizar verificações de segurança. Por exemplo, você pode configurar um pipeline de 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 afeta negativamente a experiência do usuário. Evite atalhos ou comprometer a segurança por conveniência. A segurança deve sempre ser uma prioridade.
Como startup ou desenvolvedor indie, você pode sentir que falta os recursos necessários para implementar essas medidas. No entanto, existem serviços de segurança profissionais disponíveis que oferecem opções gratuitas ou amigáveis para startups. Reserve um tempo para revisar e considerar a utilização deles.
Conclusão
A segurança é um assunto complexo, e é impossível cobrir tudo em um único artigo. Esperamos que este artigo tenha ajudado você a construir uma sensação mais forte de segurança para você mesmo ou para sua equipe. Se você está construindo um novo aplicativo, também pode querer conferir Logto, uma plataforma que ajuda você a desenvolver, gerenciar e proteger as identidades de usuário do seu produto com o mínimo de esforço.