Pular para o conteúdo principal

Arquitetura de Segurança

tupynambalucas.dev implementa uma estratégia de segurança em múltiplas camadas para proteger os dados da comunidade e garantir a integridade dos ciclos de compartilhamento. Nossa abordagem combina protocolos padrão da indústria com proteção especializada contra bots e mitigação de força bruta.


1. Proteção contra Bots (Cloudflare Turnstile)

Para evitar registros e tentativas de login automatizados, utilizamos o Cloudflare Turnstile. Ao contrário dos CAPTCHAs tradicionais, o Turnstile oferece uma experiência de verificação focada na privacidade e não intrusiva.

1.1. Integração no Lado do Cliente (React 19)

A AuthFeature utiliza o componente @marsidev/react-turnstile no Modo Gerenciado (Managed Mode).

  • Modo Gerenciado: Exibe uma caixa de seleção inteligente que verifica se o usuário é humano.
  • Gerenciamento de Estado: O botão de envio permanece desativado até que um turnstileToken válido seja emitido pelo widget.
  • Isolamento: Cada formulário (Login/Registrar) mantém sua própria instância do Turnstile por meio de chaves exclusivas do React, garantindo uma nova validação na alternância de modo.

1.2. Validação no Lado do Servidor (Fastify 5)

A API não confia apenas no estado do lado do cliente.

  • Verificação: O AuthService realiza uma requisição POST segura para https://challenges.cloudflare.com/turnstile/v0/siteverify.
  • Validação de IP: O endereço IP do cliente é enviado ao Cloudflare para detectar redes de bots baseadas em proxies.
  • DTOs Obrigatórios: O LoginDTOSchema e o RegisterDTOSchema no @tupynambalucas-hub/core exigem estritamente o turnstileToken.

2. Mitigação de Força Bruta

Protegemos nossos endpoints de autenticação contra ataques de dicionário e adivinhação automatizada por meio de dois mecanismos principais.

2.1. Limitação de Taxa (Rate Limiting)

Utilizando o @fastify/rate-limit, aplicamos limites específicos do contexto a rotas sensíveis.

  • Política Global: Um limite base de 100 requisições por minuto por IP para uso geral da API.
  • Política Estrita de Autenticação: As rotas /api/auth/login e /api/auth/register são limitadas a 5 tentativas por minuto por IP.
  • Código de Retorno: Exceder esses limites aciona uma resposta 429 (Too Many Requests).

2.2. Lógica de Bloqueio de Conta

Para evitar ataques direcionados a contas de usuários específicas:

  • Tentativas Máximas: Após 5 tentativas consecutivas com falha, a conta é bloqueada.
  • Duração do Bloqueio: A conta permanece inacessível por 15 minutos (lockUntil).
  • Persistência: O estado de bloqueio é armazenado diretamente no modelo User do Mongoose (loginAttempts, lockUntil).

3. Proteção de Dados e Ofuscação

3.1. Prevenção de Enumeração de Usuários

A API foi projetada para vazar o mínimo de informações possível sobre o estado do sistema para usuários não autenticados.

  • Erros Genéricos: Tanto "Usuário Não Encontrado" quanto "Senha Inválida" retornam um código de erro unificado INVALID_CREDENTIALS.
  • Tempo de Resposta Uniforme: Comparações criptográficas (Bcrypt) são executadas mesmo que o identificador do usuário não exista, evitando ataques de temporização (timing attacks).

3.2. Comunicação Segura

  • JWT (HS256): Todas as requisições autenticadas exigem um JSON Web Token assinado com um segredo simétrico forte.
  • Proteção CSRF: O @fastify/csrf-protection está ativado, exigindo um cabeçalho CSRF-Token para todas as requisições de alteração de estado (POST, PUT, DELETE).
  • Cookies HTTP-Only: Os tokens de sessão são armazenados em cookies assinados e HTTP-only para mitigar o roubo de tokens baseado em XSS.

4. Requisitos de Ambiente

As seguintes chaves de segurança são obrigatórias para o funcionamento da stack da Instância. Cada variável reside no arquivo env pertencente à aplicação responsável, seguindo o princípio de isolamento de Contexto Delimitado (Bounded Context) do projeto.

4.1. API (instance/apps/api/.env.*)

VariávelPropósitoAmbientes
TURNSTILE_SECRET_KEYVerificação do token do Cloudflare Turnstile no lado do servidor.dev, prod, staging
JWT_SECRETAssinatura e verificação de JSON Web Tokens.dev, prod, staging
SESSION_SECRETCriptografia de cookies de sessão assinados HTTP-only.dev, prod, staging
MONGO_URIString de conexão do MongoDB. O dev usa o Replica Set local; prod/staging usam o MongoDB Atlas (mongodb+srv://).dev, prod, staging

4.2. Web (instance/apps/web/.env.* / Docker ARG)

VariávelPropósitoMétodo de Injeção
VITE_TURNSTILE_SITE_KEYChave pública do site para renderizar o widget do Turnstile.Dev local: lida de .env.dev pelo Vite (--mode dev). Produção: injetada como ARG do Docker durante a compilação da imagem — gravada estaticamente no bundle JS.
aviso

Importante: VITE_TURNSTILE_SITE_KEY é uma chave pública (segura para ser incorporada em bundles do cliente). A TURNSTILE_SECRET_KEY é privada e só deve existir no ambiente da API, nunca no aplicativo Web ou commitada no controle de versão.


Última Atualização: Junho de 2026