Segurança
Última atualização: 30 de agosto de 2026
1. O que esta página é
Esta página descreve as medidas técnicas que o Cardim aplica hoje, escritas a partir do código tal como está publicado. Não é um contrato: os compromissos contratuais estão nos Termos de Serviço, e o que fazemos com dados pessoais, e com que fundamento, está na Política de Privacidade.
O Cardim é um produto recente, operado por uma equipa muito pequena. Preferimos dizê-lo aqui, no início, a deixá-lo implícito: a secção 7 enumera o que não existe.
2. Onde ficam os dados
As marcações e os dados dos clientes ficam numa base de dados Postgres alojada pela Neon em Londres, no Reino Unido, sobre infraestrutura AWS na região eu-west-2. A aplicação corre na Vercel, os emails transacionais são entregues pela Resend e os relatórios de erro vão para a Sentry. A lista completa de fornecedores, com as finalidades de cada um, está na secção 5 da Política de Privacidade.
Todo o tráfego é servido sobre HTTPS. A cifra do armazenamento em disco é a que estes fornecedores publicam e não é nossa; ao nível da aplicação, o que ciframos ou transformamos em hash é exatamente o que a secção seguinte enumera, e nada mais.
3. Palavras-passe, chaves e ligações
Nada nesta lista fica guardado numa forma que uma leitura da base de dados torne reutilizável, com uma exceção assinalada: os tokens de calendário têm de ser devolvidos ao fornecedor, por isso são cifrados em vez de transformados em hash.
- Palavras-passe dos comerciantes — nunca guardadas. Guardamos o resultado de scrypt, com um sal diferente por utilizador, e a verificação é feita com uma comparação em tempo constante.
- Ligações de reposição de palavra-passe — 32 bytes de aleatoriedade criptográfica, e a base de dados guarda apenas o SHA-256 do token: quem leia a base de dados não consegue repor a palavra-passe de ninguém.
- Tokens do Google Calendar e do Outlook — cifrados com AES-256-GCM antes de serem escritos, com um conjunto de chaves que permite substituir a chave sem invalidar o que já lá está.
- Sessões e ligações de marcação — identificadores de 128 bits gerados pelo gerador criptográfico do sistema. A sessão viaja num cookie httpOnly e caduca ao fim de 30 dias.
A ligação que o cliente recebe por email é, por si só, a autorização para ver, alterar ou cancelar aquela marcação — do lado do cliente não há conta nem palavra-passe. É por isso que essas ligações, e os endereços de email, são retirados dos relatórios de erro antes de saírem da aplicação, e por isso que os formulários públicos limitam o número de tentativas por origem.
4. O que a base de dados não deixa acontecer
Duas marcações não podem ocupar o mesmo recurso à mesma hora, e a garantia não está no código da aplicação: cada linha de ocupação guarda o seu intervalo temporal, e uma restrição de exclusão do Postgres recusa qualquer sobreposição. Dois pedidos que cheguem no mesmo instante não podem ambos ganhar, aconteça o que acontecer acima da base de dados.
Um gatilho separado impede que o mesmo cliente fique com duas marcações sobrepostas. Nas mesas e salas de capacidade partilhada, a contagem de lugares é validada dentro da mesma transação, com bloqueios por recurso adquiridos sempre pela mesma ordem, para que dois pedidos simultâneos não fiquem à espera um do outro.
5. Quem vê o quê
Cada ecrã do painel consulta apenas os dados do comerciante da sessão, e os pedidos de exportação e de apagamento exigem esse mesmo âmbito: um comerciante não consegue exportar nem apagar os registos de outro.
Existe uma consola interna, usada para operar o serviço, cujo acesso está limitado a uma lista fechada de endereços de email definida na configuração do servidor. Quando essa lista não está configurada, a consola recusa toda a gente em vez de deixar entrar.
6. Conservação, apagamento e exportação
Corre periodicamente uma limpeza que apaga o que já não serve para nada:
- sessões cuja validade expirou — uma sessão abandonada é uma credencial viva enquanto a linha existir;
- reservas temporárias de lugar que já caducaram;
- registos de limitação de tentativas com mais de 24 horas, que de resto guardam um hash e não o endereço original;
- inscrições em lista de espera para datas com mais de 30 dias, que são um nome, um telefone e um email de alguém que nunca chegou a ser cliente.
As marcações e os clientes não são apagados por temporizador: são o registo do negócio do comerciante. O apagamento é feito a pedido e é uma anonimização no lugar — a marcação, a hora e o valor continuam a existir, a identidade da pessoa desaparece, incluindo as observações em texto livre e os eventos espelhados no calendário ligado. Se algum desses eventos não puder ser apagado, o comerciante é informado disso em vez de ser tranquilizado.
Um comerciante pode pedir a exportação dos seus dados e o apagamento integral da conta.
7. O que não temos
Esta lista existe porque a alternativa é deixar a pergunta sem resposta e esperar que ninguém a faça:
- não temos certificação SOC 2, ISO 27001 ou qualquer outra;
- não houve auditoria de segurança externa nem teste de intrusão por terceiros;
- não oferecemos acordo de nível de serviço de disponibilidade, e a disponibilidade real depende dos fornecedores indicados na secção 2;
- não temos programa de recompensas por comunicação de vulnerabilidades.
8. Comunicar um problema
Se encontrou uma falha de segurança, escreva para support@usecardim.com com os passos para a reproduzir. Respondemos e corrigimos o que estiver ao nosso alcance, e pedimos-lhe que não a divulgue publicamente antes de estar corrigida.