Segredos e proteção de dados
Chaves, tokens e dados pessoais são o que os atacantes realmente procuram. Proteja-os em repouso, em trânsito e no histórico do seu código-fonte.
Checklist
- Mantenha segredos fora do código e do cliente. Chaves de API, senhas de banco de dados e segredos de assinatura pertencem a variáveis de ambiente ou a um gerenciador de segredos, nunca escritos no código e nunca enviados ao navegador. Ferramentas de IA frequentemente embutem chaves no código do cliente; faça grep no seu bundle em busca de qualquer coisa que pareça uma chave.
- Mantenha segredos fora do git. Adicione
.env,*.peme*.keyao.gitignoreantes do primeiro commit. Tudo o que já foi commitado está comprometido, mesmo se for apagado depois, porque permanece no histórico. Rotacione a chave. - Criptografe dados sensíveis em repouso. Use criptografia autenticada (AES-256-GCM) para segredos armazenados e conteúdo sensível do usuário, com a chave mantida fora do banco de dados.
- Sirva tudo por TLS. Nada de HTTP sem criptografia para qualquer coisa que carregue uma credencial ou dado pessoal. Redirecione HTTP para HTTPS e configure HSTS.
- Não coloque segredos ou dados pessoais em URLs. Query strings acabam em logs, no histórico do navegador e no cabeçalho Referer. Coloque-os no corpo.
- Retorne o mínimo necessário. Um endpoint de perfil ou "me" deve retornar apenas o que a interface precisa, nunca hashes de senha, chaves ou flags internas.
- Armazene tokens onde o script não consiga alcançá-los, quando possível. Um JWT em
localStorageé legível por qualquer script, então um XSS o rouba. Um cookie httpOnly evita isso (ao custo de exigir tratamento de CSRF). De qualquer forma, uma Content-Security-Policy estrita é sua última barreira. Veja infraestrutura. - Atenda aos direitos sobre os dados. Permita que os usuários exportem e excluam seus dados, e purgue-os em um cronograma. Isso é boa prática e, para muitos, uma exigência legal.
Como testar
- Abra a aba de rede das ferramentas de desenvolvedor do navegador e o bundle JS; procure por
sk-,eyJ,password,secret,key. - Rastreie o repositório e seu histórico com um scanner de segredos.
- Acesse o seu endpoint "me" e leia cada campo que ele retorna.