Segurança & LGPD
Privacidade e segurança fazem parte do design original do Nodus, não foram adicionados depois. Esta página resume as garantias que você tem como cliente — e que você pode oferecer aos seus colaboradores e candidatos.
Multi-tenant fail-closed
Cada empresa cliente tem um empresa_id próprio. Toda query sensível filtra por esse ID com checagem em 3 camadas:
- Roteador valida sessão e empresa antes do controller.
- Controller chama
Auth::requireEmpresaId()que aborta 403 se vazio. - SQL final tem
WHERE empresa_id = ?obrigatório.
Se qualquer uma das camadas falhar, a request retorna erro — nunca dados de outra empresa.
Criptografia em repouso
| O que é cifrado | Algoritmo | Onde |
|---|---|---|
| Senhas dos usuários | Argon2id | usuarios_peopleos.senha_hash |
| Sessões ativas | AES-256-CBC | nodus_sessions.data |
| API keys de integrações | AES-256-CBC | integracoes_externas.credentials_encrypted |
| Certificado eSocial A1 | AES-256-CBC | Arquivo .pfx + senha |
| Face descriptors (REP-A) | AES-256-CBC | face_descriptors.descriptor_encrypted |
| Tokens de webhook | HMAC-SHA256 | webhooks.secret |
A chave mestra (APP_ENCRYPTION_KEY) fica numa env var separada do banco — mesmo um dump do PostgreSQL não revela nada cifrado.
CSRF + XSS
- CSRF: todo POST/PUT/DELETE exige header
X-CSRF-Tokenvalidado contra a sessão. - XSS:
window.escapeHtmlaplicado em todo conteúdo dinâmico antes de innerHTML. - CSP: política Content-Security-Policy restritiva, bloqueia CDN externo.
- Sanitização de LLM: saída de IA passa por
sanitizeLlmHtmlque remove<script>,on*,javascript:.
LGPD — direitos do titular
O Nodus implementa nativamente os 9 direitos do titular previstos na Lei 13.709/2018 Art. 18:
| Direito | Como exercer | Quem |
|---|---|---|
| Confirmação de tratamento | Portal → Meus Dados | Colaborador |
| Acesso aos dados | Portal → Meus Dados → Exportar | Colaborador |
| Correção | Portal → editar próprios dados | Colaborador |
| Anonimização / exclusão | RH marca excluido_em | RH a pedido do colab |
| Portabilidade | Exportar JSON/CSV | Colaborador |
| Revogação de consentimento | Portal → Preferências de Notificação | Colaborador |
| Acesso (candidato) | Link público + token HMAC por email | Candidato sem conta |
| Exclusão (candidato) | Link público + token HMAC por email | Candidato sem conta |
| Informação sobre compartilhamento | Política de Privacidade pública | Qualquer titular |
Soft-delete & retenção
Funcionários nunca são removidos fisicamente do banco (eSocial e CLT exigem 5+ anos de retenção). O Nodus usa soft-delete:
- Marca
excluido_em = NOW()na tabelafuncionarios. - Toda query operacional adiciona
AND excluido_em IS NULL— colab some das listas, do Portal, das integrações externas. - Queries fiscais/históricas continuam vendo o registro.
Crons de retenção automática:
| Cron | O que faz | Cadência |
|---|---|---|
biometria_retencao_cron | Deleta selfies brutas >90 dias; desativa face descriptors 30d após desligamento | Diário |
lgpd_cron_retencao_candidatos | Anonimiza candidaturas inativas há 12+ meses (perde CPF/email/telefone) | Mensal |
lgpd_retencao_cron | Aplica políticas de retenção configuradas por empresa | Diário |
K-anonymity
Agregações estatísticas (clima, 360°, mercado salarial) só são exibidas quando há um mínimo de respostas — abaixo disso, os dados são suprimidos pra evitar identificação de um indivíduo específico.
| Módulo | K mínimo | Por quê |
|---|---|---|
| Avaliação 360° | ≥2 | Esconde quem deu nota baixa pro avaliado |
| Pesquisa de clima / NR-1 | ≥5 | Anonimato exigido em pesquisa psicossocial |
| Mercado salarial | ≥3 | Não revela salário individual num cargo raro |
Audit log
Toda ação destrutiva ou sensível é registrada em audit_log com:
- Quem fez (user_id + IP)
- Quando (timestamp com timezone)
- O quê (ação + entidade + ID)
- Antes / depois (diff dos dados, com mascaramento automático de senhas e tokens)
O admin acessa em ⚙️ Sistema → Auditoria — filtros por usuário, ação, intervalo de tempo. Export CSV registra quem exportou (audit recursivo).
Incidentes & vazamentos
Procedimento se identificar comportamento suspeito (login indevido, dados expostos):
- Vá em ⚙️ Sistema → Auditoria e identifique a janela do incidente.
- Revogue acessos suspeitos imediatamente — Usuários → desativar.
- Force troca de senha em massa se necessário.
- Abra um chamado urgente em Suporte com tag
SECURITY. - Notifique ANPD em até 72h via gov.br/anpd se houver vazamento confirmado (LGPD Art. 48).
O Encarregado de Dados (DPO) da Splindid Systems (empresa do Nodus) atende em /privacidade.html. Use esse canal pra reclamações formais, requisições da ANPD ou ofícios judiciais.