OWASP Top 10: As Vulnerabilidades Web Mais Críticas
Um guia prático sobre as 10 vulnerabilidades web mais comuns, com exemplos reais e como mitigá-las no seu código.
O OWASP Top 10 é a referência mais reconhecida para segurança em aplicações web. Atualizado periodicamente com base em dados reais de vulnerabilidades, ele serve como guia tanto para desenvolvedores quanto para profissionais de segurança.
A01 — Broken Access Control
A vulnerabilidade mais crítica da lista. Acontece quando usuários conseguem acessar recursos além de suas permissões.
Exemplo de código vulnerável:
# Flask — sem verificação de autorização
@app.route('/admin/users/<int:user_id>')
def get_user(user_id):
return User.query.get(user_id) # qualquer um pode acessar!
Correção:
@app.route('/admin/users/<int:user_id>')
@login_required
@require_role('admin')
def get_user(user_id):
return User.query.get_or_404(user_id)
A02 — Cryptographic Failures
Dados sensíveis expostos por uso incorreto (ou ausência) de criptografia.
Erros comuns:
- Senhas armazenadas em MD5 ou SHA1 sem salt
- Transmissão de dados sensíveis via HTTP
- Chaves criptográficas hardcoded no código
Boas práticas:
- Use
bcryptouargon2para senhas - TLS 1.2+ obrigatório em produção
- Nunca commite segredos — use variáveis de ambiente
A03 — Injection
SQL Injection ainda é um dos ataques mais explorados. Um input malicioso pode destruir seu banco de dados inteiro.
-- Vulnerável
SELECT * FROM users WHERE name = '" + input + "'
-- Input do atacante: ' OR '1'='1'; DROP TABLE users; --
Correção: sempre use queries parametrizadas ou ORMs:
# SQLAlchemy — seguro
User.query.filter_by(name=input_name).first()
A04 — Insecure Design
Falhas arquiteturais que não podem ser corrigidas apenas com patches. Exemplo: um sistema que permite brute-force ilimitado de senhas por não ter projetado rate limiting.
Princípios de design seguro:
- Threat modeling desde o início
- Princípio do menor privilégio
- Defense in depth
A05 — Security Misconfiguration
Configurações padrão inseguras, mensagens de erro detalhadas, serviços desnecessários expostos.
Checklist básico:
- Debug mode desligado em produção
- Headers de segurança configurados (CSP, HSTS, X-Frame-Options)
- Portas e serviços desnecessários fechados
- Credenciais padrão alteradas
A06 — Vulnerable Components
Usar bibliotecas desatualizadas com CVEs conhecidas. O ataque à Equifax (2017) explorou exatamente isso — uma vulnerabilidade no Apache Struts que já tinha patch disponível.
# Auditoria de dependências Python
pip-audit
# Node.js
npm audit
Conclusão
Segurança não é feature — é requisito. O OWASP Top 10 é um excelente ponto de partida, mas o aprendizado contínuo é indispensável. Para ir mais fundo, recomendo o OWASP Testing Guide e praticar em labs como HackTheBox e TryHackMe.