Repository navigation
Segurança
CAKeysama edited this page Sep 30, 2026
·
1 revision
A interface esconde o que a pessoa não pode fazer. Quem garante a segurança são as regras do Firestore e do Storage e a Cloud Function, que validam cada operação no servidor. Um cliente que chame a API do Firebase diretamente, fora da interface, esbarra nas mesmas regras.
- Firebase Authentication com e-mail e senha. O Firebase guarda apenas o hash das senhas; o ReTool nunca grava senha no Firestore.
- O cadastro público exige senha com no mínimo 6 caracteres, o mínimo do Firebase.
- A sessão só permanece aberta para contas ativas ou Convidados em análise. Bloqueio, rejeição ou exclusão encerram a sessão em tempo real.
-
Rotas:
ProtectedLayouteRoleRouteemsrc/App.tsx. -
Interface:
usePermissions(). - Contextos e casos de uso: checagens antes de gravar.
-
Servidor:
firestore.rules,storage.rulese a Cloud FunctionredefinirSenhaTemporaria, que refaz toda a checagem com o Admin SDK.
A matriz de permissões e a definição de conta operacional estão em Usuários, Cargos e Permissões. O resumo das regras por coleção está em Firebase e Firestore.
Proteções específicas aplicadas no servidor:
| Risco | Proteção |
|---|---|
| Visitante escolher o próprio cargo | O autocadastro só é aceito como Convidado, inativo e pendente, sem campos extras |
| Convidado ler dados | Leituras exigem conta operacional (Firestore e Storage) |
| Usuário alterar o próprio cargo ou status | O próprio usuário só altera nome (ou conclui a troca de senha) |
| "Desbloquear" um convidado sem aprovação | Conta ativa exige cargo atribuível e statusAprovacao: 'aprovado'
|
| Decidir a própria solicitação de cargo | Recusado nas regras e nos casos de uso |
| Aprovar cargo sem aplicá-lo, ou aplicá-lo sem aprovar | A decisão e o novo cargo precisam estar no mesmo lote |
| Várias solicitações de cargo simultâneas | Trava pendencias_cargo/{uid}
|
| Administração se bloquear ou se rebaixar | Recusado nas regras e na interface |
| Forjar ou apagar auditoria | Autoria obrigatória, carimbo do servidor, nada de update ou delete |
| Situação | Como funciona |
|---|---|
| Cadastro público | A própria pessoa define a senha (mínimo de 6 caracteres) |
| Conta criada pela Administração | Senha temporária de 14 caracteres gerada no navegador com crypto.getRandomValues e exibida uma única vez |
| Nova senha temporária | Gerada no servidor (CSPRNG do Node) pela Cloud Function, que também revoga as sessões abertas |
| Primeiro acesso com senha temporária | Troca obrigatória antes de qualquer outra tela: no mínimo 8 caracteres, letras e números, diferente da temporária. As regras bloqueiam os dados até a troca |
A senha temporária nunca é gravada no Firestore, em logs, em URLs ou no armazenamento do navegador. Detalhes em Fluxos de Acesso.
- A auditoria remove automaticamente campos de senha, token, hash e credenciais (ver Logs e Auditoria).
- Somente a Administração lê os logs, e ninguém os altera ou apaga pelo app.
- O
.envnão é versionado. Use.env.examplecomo modelo e valores reais apenas localmente. - A configuração web do Firebase (
VITE_*) é pública por natureza, porque vai no JavaScript entregue ao navegador. Por isso, toda proteção depende das regras estarem publicadas no projeto que o app usa. - Não há chaves privadas ou contas de serviço no repositório. A Cloud Function usa a identidade padrão do próprio Firebase.
- Não crie contas com credenciais fixas no código. O primeiro administrador é promovido pelo Console (ver Usuários, Cargos e Permissões).
- Conclusão da troca de senha: as regras não conseguem verificar se a senha realmente mudou no Auth. Um usuário poderia, pela API, desligar a própria exigência sem trocar a senha. Isso afeta apenas a própria conta dele.
- Login com senha errada não é auditado, porque não há identidade autenticada.
- Excluir um usuário não apaga a conta do Firebase Auth, porque o SDK do navegador não permite. Sem perfil, a conta não acessa dados e, ao entrar, volta como Convidado pendente.
- Os logs são gravados pelo cliente. A autoria e o horário são garantidos; o perfil informado e o texto descritivo não são validados.
Visão geral
Acesso e segurança
Infraestrutura
Desenvolvimento