Knowledge Base · 09

Segurança, audit trail e cumprimento RGPD

Como o FIRO protege dados: autenticação por magic link sem password, tokens cifrados, isolamento estrito multi-tenant, audit de mudanças e endpoints RGPD para exportação e eliminação.

Leitura de 5 min · Conteúdo factual extraído do produto

  • Autenticação sem password: magic link + Google OAuth
  • Tokens OAuth cifrados em base de dados
  • Audit trail em bookings, customers e notificações
  • RGPD: export e delete via portal do cliente
01

Autenticação sem password

O FIRO opta deliberadamente por mecanismos de autenticação que não passam por passwords:

Magic link

  • Utilizador insere o email; recebe link único.
  • Token gerado, hash guardado em base, com expiração.
  • Tentativas de uso registam IP e user agent.
  • Após uso, token é invalidado.

Google OAuth

Alternativa para todos os fluxos (user, staff, customer, admin). Reaproveita a segurança da conta Google do utilizador.

Vantagens

  • Sem passwords reutilizadas em vários serviços.
  • Sem ataques de credential stuffing eficazes.
  • Sem reset-de-password em massa quando há fugas em outras plataformas.
02

Tokens e dados sensíveis cifrados

Tudo o que é sensível é cifrado em base de dados via Laravel encryption (protected $casts = ['... ' => 'encrypted']):

  • Tokens OAuth Google Calendar (refresh_token, access_token) — cifrados.
  • Magic link tokens — guardados como hash, nunca em claro.
  • Passwords (quando existem em fluxos opcionais) — bcrypt nativo do Laravel.

A chave de cifragem está fora da base, no APP_KEY do ambiente. Quem só tem acesso ao backup da BD não consegue ler tokens.

03

Isolamento multi-tenant

A separação entre tenants é feita em três camadas defensivas:

  • Middleware tenant.active — resolve o tenant do request a partir do domínio antes de qualquer controller correr.
  • Global Scope TenantScope — aplicado automaticamente a queries Eloquent de models tenant-scoped, garantindo que nunca uma query devolve dados de outro tenant.
  • Verificações explícitas em controllers — para operações sensíveis, validação adicional de ownership.

Customer e magic links são modelos globais — mas marcações, transações, notas, transações são tenant-scoped por design.

04

Audit trail completo

O sistema mantém histórico de mudanças em três modelos críticos:

  • BookingChangeLog — todas as alterações em marcações: quem, o quê, quando.
  • CustomerAuditLog — alterações em dados de cliente (campos antes/depois).
  • NotificationLog — todos os emails e SMS enviados, com estado e erros.

Este trail resolve litígios típicos:

  • "O meu telefone foi alterado, quem fez?"
  • "A marcação foi cancelada por mim?"
  • "O cliente diz que não recebeu o lembrete."
05

Rate limiting e protecções

Endpoints sensíveis têm throttle aplicado:

  • Verificação de slug no signup (throttle:60,1) — 60 req/min por IP.
  • Magic link — limites no envio para evitar spam.
  • Verificação de PIN — limites no número de tentativas.

Validação de input

  • Form Requests para validar todas as mutações.
  • Eloquent / Query Builder em vez de SQL raw — protecção contra injection.
  • Escape automático em Blade — protecção contra XSS.
  • CSRF token em todas as mutações via formulário.
06

SecurityAlert e detecção de anomalias

O modelo SecurityAlert regista eventos potencialmente suspeitos para revisão da administração da plataforma. Casos típicos:

  • Tentativas de login com IP inesperado.
  • Erros 500 em rotas críticas.
  • Padrões anormais de tráfego.

Os alertas alimentam o dashboard de admin para acção rápida.

07

RGPD: direitos do titular dos dados

O FIRO suporta os direitos básicos de RGPD via GdprRequest + GdprController:

Direito de acesso (exportação)

  • Cliente abre o pedido pelo portal /minha-conta.
  • Sistema produz um pacote com perfil + marcações + transações + comunicação.
  • Endpoint /gdpr/export entrega o pacote.

Direito ao apagamento

  • Cliente pede via portal.
  • Após confirmação, dados são apagados (hard delete).
  • Histórico anonimizado mantém-se onde necessário para integridade contabilística.

Outros direitos

Direito de rectificação é coberto pela edição directa no portal /minha-conta (perfil) e via backoffice do tenant. Consentimento de marketing é explícito e revogável.

08

Práticas internas: secrets e logs

Conformidade não é só um modelo de dados; é prática:

  • Secrets apenas em variáveis de ambiente, nunca em código.
  • Passwords nunca registadas em logs.
  • Mensagens de erro ao utilizador não expõem internals (stacktrace, queries).
  • Erros 500 são capturados em SecurityAlert mas o utilizador vê uma mensagem amigável.
Para a equipa comercial

O que dizer ao lead

Para clientes maiores ou em saúde/clínica, segurança é deal-breaker. Para os mais pequenos, é confiança. Sabe distinguir o tom.

  • "Sem passwords para esquecer" — magic link funciona como Notion, Linear, Vercel. Para quem usa Excel + WhatsApp, é uma actualização.
  • "Para clínicas e estética: temos audit trail" — quando o lead pergunta "e se alguém alterar dados?", abres a discussão.
  • "RGPD não é só o aviso de cookies" — o portal do cliente tem export e delete reais. A maioria das ferramentas só tem boas intenções.
  • "Tokens cifrados em base" — para o lead técnico ou para o IT do cliente, é o detalhe que assina.

Âmbito atual & roadmap

O produto evolui semana a semana. Aqui está o que existe hoje e o que está confirmado para chegar.

Hoje no produto

  • Magic link sem password (com expiração e log de IP)
  • Google OAuth multi-fluxo
  • Tokens cifrados em base via Laravel encryption
  • Isolamento multi-tenant em 3 camadas
  • Audit trail (booking, customer, notification)
  • Rate limiting e validação contra injection/XSS
  • GDPR export e delete via portal
  • SecurityAlert para anomalias

A caminho

  • 2FA opcional (TOTP / WebAuthn) para roles owner/manager
  • SSO empresarial (SAML / OIDC) em planos enterprise
  • Logs de acesso detalhados (quem leu o quê)
  • Política de password complexa quando opcionalmente activada

Perguntas frequentes

O FIRO está em conformidade com o RGPD?

Sim: cifragem de dados sensíveis, audit trail, endpoints de export e delete via portal do cliente, consentimento explícito de marketing. O cumprimento contínuo depende também das práticas do tenant na operação dos seus dados.

Tem 2FA?

Hoje não está como feature standalone — o magic link já elimina parte do risco que o 2FA cobre. 2FA com TOTP/WebAuthn está no roadmap para roles owner/manager.

Como sei que outro tenant não vê os meus dados?

Há três camadas de defesa: middleware que resolve o tenant antes de qualquer query, global scope que filtra automaticamente queries Eloquent, e verificações explícitas em operações sensíveis.

Posso restringir o acesso a IPs específicos?

Hoje não como feature — está em avaliação para roadmap em planos superiores.

Onde estão os servidores?

Infraestrutura em Europa, com Cloudflare como camada de edge. Para detalhes específicos pedidos por compliance, falar com [email protected].

Continua à conversa com a equipa comercial

Mostramos o produto a funcionar, respondemos a dúvidas específicas do teu negócio e ajudamos-te a escolher o plano certo.

Continua a explorar a Knowledge Base