Pontos principais
- Os dados de cada restaurante são separados dentro do próprio banco de dados, e não apenas no app.
- As senhas são protegidas com hash scrypt; falhas repetidas bloqueiam a conta por 15 minutos.
- As sessões são renovadas a cada atualização, e uma sessão reutilizada encerra toda a cadeia de login.
- Pedidos, dinheiro, pontos e registros de auditoria só aceitam inclusões.
Cada restaurante no seu próprio espaço
Todos os restaurantes funcionam em uma única plataforma, mas é o banco de dados que garante a separação. Todas as tabelas de restaurantes têm a segurança em nível de linha ativada e obrigatória, e cada requisição é executada em uma transação vinculada a um único restaurante. A conta usada pela aplicação não consegue contornar essas regras.
Dois perfis internos podem passar por elas para tarefas restritas: os processos em segundo plano, que só podem listar quais restaurantes estão ativos antes de fazer o seu trabalho restaurante por restaurante, e a central de controle da equipe SCALE, que não tem acesso a endereços de clientes, localizações de pedidos, hashes de senhas nem aos logs de auditoria dos próprios restaurantes.
Login e senhas
- As senhas têm de 8 a 128 caracteres e são armazenadas como hashes scrypt com um salt aleatório; a comparação é feita em tempo constante.
- Cinco senhas erradas bloqueiam a conta por 15 minutos. Tentar entrar em uma conta que não existe leva o mesmo tempo, então isso não revela quais contas existem.
- As tentativas de login também são limitadas por endereço em um intervalo de 15 minutos: 10 para a equipe, 60 para clientes e 5 cadastros de novos clientes. As contagens são compartilhadas por todos os servidores.
- Os códigos de verificação têm 6 dígitos, expiram após 10 minutos e permitem um número limitado de tentativas.
- A proteção contra bots da Cloudflare pode ser ativada no login e na finalização de pedidos.
Sessões que não podem ser reaproveitadas
Um login gera um token de acesso de curta duração (15 minutos por padrão) e um token de renovação. Cada renovação substitui o token de renovação por um novo. Se um token antigo voltar a ser usado, toda a cadeia de sessões é encerrada, o que impede que um token roubado seja usado por muito tempo.
Cada requisição também verifica se a sessão continua ativa, então remover um funcionário, alterar a senha dele ou reduzir o seu perfil o desconecta de todos os lugares ao mesmo tempo. Os cookies do painel não podem ser lidos por scripts da página e não são enviados por outros sites.
Perfis com privilégio mínimo
O acesso é montado a partir de 29 permissões, desde ver pedidos até confirmar dinheiro ou gerenciar a equipe. O proprietário pode criar perfis com qualquer combinação delas, e os funcionários podem ser limitados a uma unidade. Ninguém pode conceder uma permissão que não tem, os perfis padrão não podem ser editados e o último proprietário ativo não pode ser removido.
O painel oculta o que um perfil não pode usar, mas isso serve apenas para dar clareza: o servidor verifica a permissão, a unidade e o vínculo com o restaurante em cada ação.
Registros que não podem ser reescritos
As mudanças de status dos pedidos, o histórico de pontos, as movimentações de estoque, o histórico de preços e o log de auditoria só aceitam inclusões. O banco de dados rejeita qualquer alteração ou exclusão, então as correções são feitas acrescentando um novo lançamento visível.
Respeito aos dados dos clientes
- As localizações dos pedidos só são coletadas enquanto o app está aberto, com consentimento, e são excluídas após 180 dias.
- Os clientes podem excluir a própria conta pelo site ou app. Os endereços, localizações, dispositivos, notificações e a senha deles são removidos, e o perfil é anonimizado.
- Para impedir que a mesma pessoa use de novo as ofertas para novos clientes, são mantidas apenas impressões digitais protegidas do telefone e do e-mail dela.