O Que É Injeção de SQL (SQLi)?
Injeção de SQL (SQLi) é um tipo de ataque onde atacantes inserem comandos SQL maliciosos em campos de entrada para manipular o banco de dados.
Este ataque tem como alvo aplicações que falham em lidar corretamente com a validação, entrada de usuário, permitindo acesso não autorizado a dados sensíveis como senhas ou detalhes de cartão de crédito, etc.
Como Funciona a Injeção de SQL
Quando uma aplicação inclui diretamente a entrada do usuário em uma consulta de banco de dados sem a devida validação, os atacantes podem modificar o comportamento da consulta para inserir um comando SQL malicioso.
Por exemplo:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Um atacante poderia inserir:
' OR '1'='1
Resultando em:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Isso sempre retorna verdadeiro, concedendo acesso não autorizado.
Por Que a Injeção de SQL É Importante na Cibersegurança
A Injeção de SQL é a técnica mais perigosa e antiga na cibersegurança. Este tipo de ataque é consistentemente listado no OWASP Top 10.
Mesmo pequenas vulnerabilidades permitem que um atacante:
- Acessar, modificar ou excluir dados
- Contornar autenticação
- Executar operações administrativas no banco de dados.
- Comprometer todo o sistema.
Tipos Comuns de Injeção SQL
- SQLi Clássico: Injeção direta via formulários web ou parâmetros de URL.
- SQLi Cego: Os atacantes inferem informações do banco de dados indiretamente (por exemplo, através de mensagens de erro ou tempo de resposta).
- SQLi baseado em União: Usa o operador UNION para combinar resultados de múltiplas consultas.
- SQLi baseado em Erro: Baseia-se em mensagens de erro do banco de dados para extrair informações.
- SQLi Cego baseado em Tempo: Explora atrasos na resposta do servidor para adivinhar resultados de consultas.
Como Prevenir Injeção SQL
1. Use Consultas Parametrizadas (Declarações Preparadas)
Garanta que comandos SQL tratem a entrada do usuário como dados, não como código executável.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Validação e Saneamento de Entrada
Valide todas as entradas dos usuários, permitindo apenas caracteres esperados.
3. Use frameworks ORM
Frameworks como Prisma, Hibernate, etc., reduzem o manuseio direto de SQL.
4. Princípio do Menor Privilégio
Limite a permissão do usuário, concedendo apenas a permissão necessária.
5. Testes de Segurança Regulares
Use ferramentas de teste de segurança de aplicativos como SAST, DAST ou IAST para detectar falhas de injeção precocemente.
Exemplo no Mundo Real
Um site de loja online sofreu uma violação onde atacantes usaram uma injeção SQL em um formulário de login para extrair detalhes de cartões de crédito de seu banco de dados.
Termos Relacionados
- XSS (Cross-Site Scripting)
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- Teste de Segurança de Aplicações