𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 𝗔𝘂𝗱𝗶𝘁 𝗥𝗲𝘀𝘂𝗹𝘁𝘀: 𝗪𝗵𝘆 𝗜 𝗳𝗲𝗹 𝗲𝗺𝗯𝗮𝗿𝗿𝗮𝘀𝘀𝗲𝗱 -> 𝗥𝗲𝘀𝘂𝗹𝘁𝗮𝗱𝗼𝘀 𝗱𝗮 𝗔𝘂𝗱𝗶𝘁𝗼𝗿𝗶𝗮 𝗱𝗲 𝗦𝗲𝗴𝘂𝗿𝗮𝗻𝗰̧𝗮: 𝗣𝗼𝗿 𝗾𝘂𝗲 𝗳𝗶𝗾𝘂𝗲𝗶 𝗲𝗺𝗯𝗮𝗿𝗮𝗰𝗼𝘀𝗼
Recentemente, realizei uma auditoria de segurança em todos os meus projetos paralelos. Isso inclui meu backend FastAPI, bots do Telegram, PWA e aplicativos Streamlit.
Eu achava que meu código estava seguro porque eu era cuidadoso. Eu estava errado.
Estou compartilhando esses bugs reais de produção para ajudar você a evitá-los. Estas não são listas de verificação teóricas. Estes são erros que eu realmente cometi.
A Armadilha da Autenticação Condicional Escrevi um código que verificava se um segredo de API existia antes de verificá-lo. Se a variável de ambiente estivesse faltando, a verificação era totalmente ignorada. Isso significava que toda a minha API estava aberta ao público. Regra: Se um segredo estiver faltando, falhe drasticamente com um erro 500. Nunca ignore a autenticação.
O Vazamento no Histórico do Git Uma vez, eu deixei uma chave de API hardcoded para um teste rápido. Depois, movi para um arquivo .env e pensei que estivesse resolvido. Mas o Git lembra de tudo. Qualquer pessoa pode encontrar essa chave no meu histórico de commits. Regra: Se você fizer o commit de uma chave, assuma que ela foi roubada. Rotacione-a imediatamente. Use
git-filter-repopara limpar seu histórico.O Vazamento de Endpoint de Debug Deixei um endpoint
/debug/configem produção para me ajudar na resolução de problemas. Ele expunha minhas URLs de banco de dados e configurações de ambiente. Regra: Remova todos os endpoints de debug antes da implantação. Use logs em vez disso.Vazamento de Informações do Sistema via Erros Usei
str(e)em minhas respostas de erro. Isso enviava erros de banco de dados e caminhos de arquivos diretamente para o usuário. Atacantes usam isso para mapear sua infraestrutura. Regra: Registre o erro detalhado para você mesmo. Envie um "Internal Server Error" genérico para o cliente.O Risco de XSS no Frontend Usei
innerHTMLpara renderizar conteúdo de usuário. Isso permitia que scripts fossem executados nos navegadores de outros usuários. Regra: Sempre faça o escape de HTML. Trate oinnerHTMLcomo uma forma de executar código arbitrário.Ausência de Rate Limits Eu tinha endpoints que chamavam modelos de IA caros sem qualquer limite. Um único loop ou uma chave roubada poderia me custar centenas de dólares. Regra: A autenticação impede usuários não autorizados. O rate limiting impede que usuários autorizados abusem do seu sistema.
Política de CORS Permissiva Usei
allow_origins=["*"]em produção. Isso permite que qualquer site faça requisições para sua API. Regra: Permita apenas o domínio específico do seu frontend.O Vazamento de Arquivos Temporários Se o meu código travasse durante o processamento de um arquivo, o arquivo temporário permanecia no disco para sempre. Isso desperdiça espaço e vaza dados sensíveis. Regra: Use blocos try-finally para garantir que os arquivos sejam excluídos mesmo que ocorra um erro.
Meu novo checklist obrigatório:
Antes de codificar: • Crie um .gitignore • Crie um .env.example
Para cada endpoint: • Adicione autenticação • Use mensagens de erro genéricas • Adicione limites de taxa para tarefas custosas
Antes de fazer o commit: • Procure por segredos no seu diff
Antes de fazer o deploy: • Execute auditorias de segurança em suas dependências
Problemas de segurança não acontecem por acidente. Eles acontecem por causa de comentários "TODO" e correções "temporárias" que permanecem em produção para sempre.
Corrigir um bug é entediante. Corrigir uma violação é caro.