OWASP Top 10 Explicado com Exemplos Práticos
Você construiu uma aplicação web e agora está preocupado com a segurança. O OWASP Top 10 é a lista de referência dos riscos críticos de segurança em aplicações web. Mas ler a lista é uma coisa; entender como esses riscos se manifestam no código real é outra. Este artigo percorre cada categoria do OWASP Top 10 com exemplos práticos e passos concretos para mitigá-los.
1. Controle de Acesso Quebrado
O controle de acesso quebrado ocorre quando os usuários podem agir fora de suas permissões pretendidas. Por exemplo, um usuário pode acessar a conta de outro usuário alterando um parâmetro de URL.
// Vulnerável: Nenhuma verificação se o ID do usuário solicitado pertence ao usuário autenticado
app.get('/api/user/:id', (req, res) => {
const user = getUserById(req.params.id);
res.json(user);
});
Mitigação: Aplique verificações de controle de acesso no lado do servidor. Use controle de acesso baseado em funções ou atributos e negue por padrão.
2. Falhas Criptográficas
Dados sensíveis como senhas e números de cartão de crédito devem ser criptografados em trânsito e em repouso. Usar algoritmos fracos ou embutir segredos no código são armadilhas comuns.
# Vulnerável: Usando MD5 para hash de senha
import hashlib
hash = hashlib.md5(password.encode()).hexdigest()
Mitigação: Use algoritmos de hash fortes e com salt, como bcrypt ou Argon2. Sempre use HTTPS (TLS) para dados em trânsito.
3. Injeção
Falhas de injeção, como injeção de SQL, ocorrem quando dados não confiáveis são enviados a um interpretador como parte de um comando ou consulta.
// Vulnerável: Concatenação de strings na consulta SQL
$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "'";
Mitigação: Use consultas parametrizadas ou instruções preparadas. Nunca concatene a entrada do usuário diretamente nas consultas.
4. Design Inseguro
Design inseguro refere-se a controles de design ausentes ou ineficazes. Por exemplo, um sistema de recuperação de senha que revela se um e-mail existe pode ajudar os atacantes.
Mitigação: Modelagem de ameaças durante o design, use padrões de design seguros e implemente limitação de taxa e outros controles.
5. Configuração de Segurança Incorreta
Isso inclui deixar contas padrão habilitadas, exibir rastreamentos de pilha para os usuários ou configurar incorretamente as permissões de armazenamento em nuvem.
# Vulnerável: Modo de depuração habilitado em produção
DEBUG = True
Mitigação: Reforce as configurações, remova recursos não utilizados e automatize as verificações de configuração.
6. Componentes Vulneráveis e Desatualizados
Usar bibliotecas com vulnerabilidades conhecidas é como deixar uma porta aberta. Por exemplo, uma versão desatualizada de uma biblioteca popular pode ter uma falha de execução remota de código.
Mitigação: Atualize regularmente as dependências, use ferramentas como OWASP Dependency-Check e monitore CVEs.
7. Falhas de Identificação e Autenticação
Autenticação fraca permite que atacantes adivinhem senhas ou sequestrem sessões.
// Vulnerável: Sem bloqueio de conta após tentativas falhas
if (passwordMatches) {
loginUser();
} else {
// apenas mostra erro, sem limitação de taxa
}
Mitigação: Implemente autenticação multifator, aplique políticas de senha fortes e use gerenciamento de sessão seguro.
8. Falhas de Integridade de Software e Dados
Esta categoria inclui o uso de fontes não confiáveis para atualizações de software ou desserialização de dados não confiáveis.
// Vulnerável: Desserializando dados não confiáveis
$data = unserialize($_POST['data']);
Mitigação: Verifique assinaturas digitais, use verificações de integridade e evite desserializar dados não confiáveis.
9. Falhas de Registro e Monitoramento de Segurança
Sem o registro adequado, as violações passam despercebidas. Por exemplo, não registrar tentativas de login falhas.
Mitigação: Registre eventos relevantes para a segurança, configure alertas e tenha um plano de resposta a incidentes.
10. Falsificação de Solicitação do Lado do Servidor (SSRF)
SSRF ocorre quando um atacante pode fazer o servidor enviar solicitações para locais não intencionais.
// Vulnerável: Buscando URL da entrada do usuário sem validação
fetch(req.query.url).then(...)
Mitigação: Valide e sanitize URLs, use listas de permissões e restrinja as permissões do servidor.
Tabela Comparativa
| Risco | Exemplo | Mitigação |
|---|---|---|
| Controle de Acesso Quebrado | Acessar dados de outros usuários via manipulação de URL | Aplicar verificações de acesso no lado do servidor |
| Falhas Criptográficas | Armazenar senhas em texto simples | Use hash forte e TLS |
| Injeção | Injeção de SQL via entrada não sanitizada | Consultas parametrizadas |
| Design Inseguro | Recuperação de senha revela existência de e-mail | Modelagem de ameaças e padrões seguros |
| Configuração de Segurança Incorreta | Modo de depuração ativado em produção | Reforce as configurações |
| Componentes Vulneráveis | Biblioteca desatualizada com CVE conhecida | Atualizações regulares e verificação de dependências |
| Falhas de Autenticação | Sem limitação de taxa no login | MFA e políticas fortes |
| Falhas de Integridade | Desserialização de dados não confiáveis | Verifique assinaturas e evite desserialização insegura |
| Falhas de Registro | Sem logs para logins falhos | Implemente registro e monitoramento |
| SSRF | Buscando URL fornecida pelo usuário | Valide e permita apenas URLs confiáveis |
Perguntas Frequentes
O que é o OWASP Top 10?
O OWASP Top 10 é uma lista atualizada regularmente dos riscos de segurança mais críticos em aplicações web, publicada pelo Open Web Application Security Project (OWASP).
Com que frequência o OWASP Top 10 é atualizado?
Ele é atualizado periodicamente para refletir ameaças emergentes e mudanças na tecnologia. A última grande atualização foi em 2021.
O OWASP Top 10 é suficiente para a segurança?
Não, é um ponto de partida. Um programa de segurança abrangente inclui práticas de codificação segura, testes regulares e monitoramento contínuo.
Para proteger ainda mais suas aplicações, considere usar ferramentas como o Analisador de Logs Nginx para monitorar e detectar atividades suspeitas nos logs do seu servidor.