Os Bugs de Segurança que Desenvolvedores Node.js Enviam para Produção
Eu revisei o código de uma startup no ano passado. O código parecia limpo. Os testes passaram.
Então eu vi esta linha:
const query = \SELECT * FROM users WHERE email = '${req.body.email}'``
Este é um bug de SQL injection. A startup rodou isso em produção por 8 meses. Nenhum desenvolvedor ou CTO percebeu.
Esses bugs são invisíveis porque o código funciona. Ele funciona até que um usuário digite um comando malicioso em um campo de entrada.
Pare de cometer estes 5 erros comuns:
- SQL puro com entrada de usuário Não use template literals para consultas. Isso permite que invasores acessem seu banco de dados.
- Ruim:
const query = \SELECT * FROM users WHERE email = '${email}'`` - Bom: Use consultas parametrizadas.
const query = 'SELECT * FROM users WHERE email = $1'db.query(query, [email])
Vazamento de segredos no Git Desenvolvedores frequentemente fazem commit de arquivos .env em repositórios. Isso expõe suas URLs de banco de dados e chaves de API. Sempre adicione .env ao seu arquivo .gitignore.
Usar jwt.decode em vez de jwt.verify O
jwt.decodeapenas lê o token. Ele não verifica se o token é real. Qualquer pessoa pode forjar um token decodificado.
- Ruim:
const user = jwt.decode(token) - Bom: Sempre verifique a assinatura.
const user = jwt.verify(token, process.env.JWT_SECRET)
- Falta de rate limiting em endpoints de autenticação Sem rate limiting, invasores podem tentar milhões de senhas via força bruta. Use uma biblioteca para limitar as tentativas de login.
- Bom: Adicione um limite de 10 tentativas a cada 15 minutos.
- Mensagens de erro detalhadas demais Enviar mensagens de erro brutas para o cliente ajuda invasores a mapearem seu sistema. Eles conseguem ver os nomes das suas tabelas e os tipos de banco de dados.
- Ruim:
res.status(500).json({ error: error.message }) - Bom: Registre o erro internamente. Envie uma mensagem genérica para o usuário.
res.status(500).json({ error: 'Something went wrong' })
Antes de enviar um endpoint, faça uma pergunta: O que acontece se um usuário enviar dados inesperados?
Bugs de segurança raramente são complexos. Eles acontecem quando você esquece de pensar em agentes maliciosos.
Qual bug de segurança você já encontrou em produção?
Source: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6
