Segurança

Segurança, sem rodeios

A MyFina é uma contabilidade doméstica. Dados financeiros são especiais — aqui mostramos como são protegidos, sem enrolação de marketing.

Três respostas curtas para as perguntas importantes

Como é criptografado

TLS 1.3 em trânsito (Let's Encrypt). Chaves de API externas, tokens bancários e segredos de brokers — AES-256-GCM com IV único por registro. Senhas — bcrypt (12 rounds). A chave de criptografia vive em env, não no banco.

Onde é armazenado

PostgreSQL 16 em instância gerenciada na Hetzner (Alemanha, UE). Rede Docker isolada, sem conexões externas ao banco. Backups — diários, criptografados antes do upload, retenção de 30 dias.

Como é apagado

Hard-delete da conta em um passo só: transações, contas, categorias, moedas e tokens são removidos em cascata. Sem tabelas soft-delete, sem arquivo «por via das dúvidas». Leads de marketing com o mesmo e-mail — erase-hook separado (GDPR Art. 17).

Seis pilares de defesa

Autenticação

NextAuth.js v5 sobre JWT, senhas com hash bcrypt. Login throttling — 5 tentativas / 15 min por identificador e 20 / 15 min por IP. OAuth do Google opcional. Reset de senha via token de 32 bytes; no banco fica apenas seu SHA-256.

Criptografia «at rest»

Chaves de API externas (bancos, Resend, Anthropic) e segredos de brokers são criptografados com AES-256-GCM. A chave nunca sai do servidor. Cada conexão bancária carrega seu próprio webhook secret hex de 32 bytes.

Isolamento de dados do usuário

Toda operação UPDATE/DELETE filtra por `userId`. A proteção IDOR é centralizada em `assertCanAccessAccount/Category` — acesso à conta de outro retorna 403, não 404. Contas familiares compartilhadas usam papéis explícitos OWNER/MEMBER/VIEWER.

Sessões e revocation

JWT com `session_version` incremental. Mudança de senha, bloqueio de conta ou troca de papel invalidam todas as sessões ativas. Refresh tokens da API móvel rotacionam a cada refresh.

GDPR e privacidade

O hard-delete da conta remove todas as transações, contas e categorias em cascata em uma única transação. Exportação de dados — CSV/XLSX/PDF com um clique. Cookie consent com três categorias (essential / functional / analytics), partilhado entre o site e a app: o GA4 só funciona após o consentimento, sem perfilagem publicitária.

Auditoria e observabilidade

Todas as ações de admin e operações sensíveis do usuário são gravadas em `audit_log` com IP, user-agent e source. Logs de tentativas de login ficam 30 dias. Eventos de webhook do Stripe ficam em um journal de idempotency dedicado para replay seguro em falhas.

O que NÃO fazemos

  • Não vendemos nem compartilhamos seus dados com terceiros. Nossa fonte de receita é a assinatura Pro, não anúncios.
  • Não usamos trackers publicitários nem perfilagem — sem Facebook Pixel, Mixpanel, Hotjar. O Google Analytics 4 só funciona após o seu consentimento.
  • Não guardamos senhas em texto claro — bcrypt com 12 rounds, sem backdoor-recovery.
  • Não embedamos seu saldo ou transações em sites parceiros — sem widget, nada para vazar.

Sincronização bancária — o que é compartilhado de fato

Se você conecta Monobank ou um banco PSD2 via GoCardless, recebemos apenas o necessário para sincronizar transações: pagamentos de saída, transferências de entrada, saldos das contas. Nenhum dado pessoal do lado do banco (passaporte, foto, biometria). O token de API do banco fica armazenado criptografado com AES-256-GCM; você pode revogar o acesso com um clique em Configurações → Bancos. O consentimento do GoCardless expira a cada 90 dias por exigência da PSD2 — lembramos 7 dias antes.

Perguntas frequentes sobre segurança

Onde estão fisicamente os servidores e quem detém os dados?

Os servidores estão no centro de dados Hetzner em Frankfurt, Alemanha (UE). O controlador de dados é o proprietário do MyFina — sem intermediários agregadores, sem fornecedores de nuvem dos EUA. A lista completa de subprocessadores está em /security/subprocessors.

O que acontece aos meus dados se o MyFina encerrar?

Pelo menos 30 dias antes enviaremos um email com notificação e um botão "Descarregar tudo" em formatos CSV / XLSX / PDF. Após o período de graça a base de dados será destruída. É um compromisso operacional nos Termos, não uma promessa de marketing.

Posso eliminar a minha conta completamente?

Sim. Definições → Dados → Eliminar conta é um hard-delete numa única transação DB: transações, contas, categorias, tokens e leads de marketing ligados ao mesmo email são apagados em cascata. Sem soft-delete, sem arquivos "por precaução". Totalmente conforme RGPD art. 17.

Quem dentro do MyFina vê os meus dados financeiros?

Ninguém do "pessoal" tem acesso rotineiro aos teus dados financeiros. O proprietário só acede à base de dados durante um incidente de segurança ou com o teu pedido explícito via support. Todas as ações de admin são registadas em audit_log com IP e user-agent.

Se roubarem o meu portátil — a palavra-passe do MyFina protege-me?

As sessões do browser são JWTs com TTL, não "sessão iniciada para sempre". Se o teu browser atual está terminado, ninguém entra sem a palavra-passe. Com sessão ativa — usa lock-screen do SO e/ou muda a palavra-passe de outro dispositivo (isto invalida todas as sessões ativas imediatamente).

Estão ligados ao Google Analytics, Facebook Pixel ou outros trackers?

Não temos Facebook Pixel, Mixpanel nem Hotjar. Google Analytics 4 sim: um único contentor GTM partilhado funciona no site e na app. Só arranca após o seu consentimento no banner de cookies (categoria analytics, desativada por omissão) e serve para estatística web e medição de conversões do Google Ads. A personalização de anúncios está desativada.

O que você pode verificar sozinho

Toda afirmação acima é auditável via código e API.

  • Criptografia: src/lib/crypto.ts (AES-256-GCM, randomBytes IV, auth tag).
  • Autenticação: src/auth.ts, src/lib/auth/rate-limit.ts.
  • Autorização: src/lib/auth/ownership.ts (assertCanAccessAccount).
  • API aberta: https://app.my-fina.com/api/openapi (OpenAPI 3.1).
  • Health endpoint: https://app.my-fina.com/api/health (liveness público).

Receber avisos de segurança

Inscreva-se para saber de CVEs, patches de segurança e mudanças no modelo de ameaças. Sem marketing.

Avisar-me quando o Pro estiver disponível

Um email. Sem spam. Cancelar em um clique.

Conforme com GDPR · dados processados na UEÚltima atualização: 3 de junho de 2026