A segurança é um requisito de primeira classe do Agendify: a plataforma lida com dados pessoais e com o controle de acesso a espaços físicos. Este documento define a política de divulgação de vulnerabilidades e as diretrizes técnicas de segurança e privacidade.
Encontrou uma vulnerabilidade? Não abra uma Issue pública. Reporte de forma responsável:
- Use o canal privado GitHub Security Advisories do repositório (Report a vulnerability), ou
- Entre em contato diretamente com os mantenedores.
Inclua descrição, passos de reprodução, impacto e, se possível, uma sugestão de correção. Comprometemo-nos a acusar o recebimento e a tratar o report com prioridade. Pedimos que não divulgue publicamente até que uma correção esteja disponível (coordinated disclosure).
- Tokens JWT assinados (HS256), com validação obrigatória de assinatura, emissor,
audiência e tempo de vida em toda verificação — inclusive em clientes que apenas leem
claims. Nunca reconstrua um
ClaimsPrincipala partir de um token sem validar a assinatura. - Tokens de curta duração (expiração configurável — RNF-001). Refresh tokens com rotação e MFA para administradores estão previstos no ROADMAP.md.
- Autorização baseada em papéis (
Administrator,Common) aplicada nos controllers. Endpoints seguem o princípio do menor privilégio; apenas o cadastro inicial de usuário é anônimo. - Considerar RS256 (chaves assimétricas) quando múltiplos serviços precisarem validar tokens de forma independente.
- Senhas são armazenadas exclusivamente como hash — nunca em texto plano, nunca reversível.
- Algoritmo atual: BCrypt com salt por usuário e work factor ≥ 12.
- Para novas implementações, recomenda-se Argon2id (resistente a ataques de GPU/ASIC), com parâmetros de memória/tempo calibrados.
- Aplicar política de senha forte no cadastro e verificação contra senhas vazadas conhecidas quando viável.
- A recuperação de senha (RF-003) deve usar tokens de uso único, com expiração curta e invalidação após o uso.
- Em trânsito: HTTPS/TLS obrigatório em todas as comunicações (API, Web, Mobile), com HSTS/redirecionamento e CORS restrito às origens conhecidas.
- Em repouso: encryption at rest no armazenamento do banco (ex.: MongoDB Atlas) e, para PII especialmente sensível, considerar criptografia em nível de campo.
- Chaves e segredos de criptografia são gerenciados fora do código (ver abaixo).
- Nenhum segredo é versionado.
appsettings.jsonmantém valores vazios; segredos vêm de:- Desenvolvimento: .NET User Secrets (
dotnet user-secrets). - Produção: variáveis de ambiente (
DatabaseSettings__ConnectionString,JwtSettings__Secret— o:das chaves vira__).
- Desenvolvimento: .NET User Secrets (
- A API faz validação fail-fast no boot: aborta se a connection string estiver ausente ou se o segredo JWT estiver ausente/curto (< 32 caracteres).
- Gitleaks roda no pre-commit (
.githooks/pre-commit) e na CI a cada push/PR. Recomenda-se habilitar Secret Scanning + Push Protection nas configurações do repositório. - Consulte o
.env.examplepara a lista de variáveis.
- Validação de entrada em todos os endpoints; nunca confiar em dados do cliente.
- Padrão de erros sem vazamento de detalhes internos (usar
ProblemDetails/RFC 7807). - Prevenção de double-booking com garantia atômica no banco (índice único + transação) — ver Arquitetura → Concorrência e Consistência.
- Armazenamento seguro de tokens no cliente: no mobile, usar
expo-secure-store(Keychain/Keystore) em vez deAsyncStoragenão criptografado. - Dependências: varredura contínua (Dependabot /
npm audit/ auditoria NuGet) e SAST (CodeQL) na CI — ver CI/CD. - Logs de auditoria para autenticação e para o ciclo de vida de reservas, sem registrar dados sensíveis em texto plano.
O Agendify trata dados pessoais (nome, e-mail, histórico de reservas) e adere à Lei Geral de Proteção de Dados (Lei nº 13.709/2018):
- Base legal e finalidade: o tratamento se limita à finalidade de gestão de reservas, com base legal adequada (execução de contrato/serviço e/ou consentimento).
- Minimização de dados: coletar apenas o necessário para operar o serviço.
- Direitos do titular: suportar acesso, correção, portabilidade e eliminação ("direito ao esquecimento") dos dados pessoais mediante solicitação.
- Consentimento: obter e registrar consentimento quando aplicável; permitir sua revogação.
- Retenção: definir prazos de retenção e rotinas de expurgo/anonimização de dados que não sejam mais necessários.
- Segurança e incidentes: medidas técnicas e administrativas de proteção; em caso de incidente com risco aos titulares, seguir plano de resposta a incidentes e notificação à ANPD e aos titulares nos prazos legais.
- Encarregado (DPO): designar um responsável pelo tratamento de dados como ponto de contato.
- Rastreabilidade: logs de auditoria apoiam a demonstração de conformidade (accountability).
Correções de segurança são aplicadas à branch main (versão estável). Recomenda-se manter
dependências atualizadas e acompanhar os alertas do Dependabot.