Injeção de SQL: como e por que funciona
Entenda a SQLi clássica, cega e fora de banda, além de descobrir por que consultas parametrizadas a impedem.
Injeção de SQL: como e por que funciona é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
O que é injeção de SQL?
Injeção de SQL (SQLi) ocorre quando uma entrada fornecida pelo usuário é incluída em uma consulta SQL sem a sanitização adequada, permitindo que invasores manipulem a lógica da consulta. É uma das vulnerabilidades da web mais antigas e mais prejudiciais.
Como funciona a injeção de SQL
Um formulário de acesso consulta: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'
Se o invasor inserir ' OR 1=1-- como nome de usuário, a consulta se torna: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' — o que retorna todos os usuários.
Tipos de injeção de SQL
Variantes de SQLi:
- Em banda: os resultados são retornados diretamente na resposta (clássica ou baseada em erros)
- Cega booleana: não há saída direta; os dados são inferidos a partir de respostas verdadeiras ou falsas
- Cega baseada em tempo: os dados são inferidos a partir dos atrasos na resposta (
SLEEP(5)) - Fora de banda: os dados são extraídos por meio de solicitações DNS/HTTP
Injeção baseada em UNION
Os ataques UNION acrescentam resultados de consultas controladas pelo invasor:
-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--Injeção baseada em erros
As mensagens de erro revelam a estrutura do banco de dados. O invasor fornece dados que causam um erro de sintaxe, e a mensagem de erro resultante expõe nomes de tabelas, nomes de colunas ou a versão do banco de dados. Desative mensagens de erro detalhadas em produção.
Injeção cega de SQL
Quando não há saída visível, os invasores usam condições booleanas:
-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--sqlmap: injeção de SQL automatizada
sqlmap automatiza a detecção e a exploração de injeções de SQL. Ele pode extrair bancos de dados, ler arquivos e até executar comandos do OS se o usuário do banco de dados tiver privilégios suficientes.
sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dumpPrevenindo a injeção de SQL: consultas parametrizadas
A principal defesa são as consultas parametrizadas (instruções preparadas). A entrada do usuário é passada como um parâmetro e nunca concatenada à cadeia da consulta:
# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])Proteção de ORM
Usar um ORM (SQLAlchemy, Hibernate, Sequelize) normalmente impede a injeção de SQL, pois as consultas são construídas com abstrações seguras. No entanto, métodos de consulta bruta (execute(), query()) com interpolação de cadeias de caracteres contornam as proteções do ORM.
Validação da entrada e WAF
Defesas adicionais:
- Valide e permita somente tipos de entrada autorizados (inteiros, endereços de e-mail)
- Use um Firewall de aplicações web (WAF) para detectar padrões de injeção
- Use contas de banco de dados com o menor privilégio (sem DROP e sem UNION em consultas somente leitura)
- Use procedimentos armazenados (reduzem a exposição, mas não são uma solução completa)
Impacto da injeção de SQL
Uma injeção de SQL bem-sucedida pode resultar em: extração completa do banco de dados, contorno da autenticação, modificação ou exclusão de dados, leitura de arquivos do servidor (LOAD_FILE), gravação de shells web e execução de comandos do OS por meio de xp_cmdshell (MSSQL).
Verificação rápida: Injeção de SQL
Qual é a principal defesa contra a injeção de SQL?
Recapitulação da lição
A injeção de SQL manipula consultas ao banco de dados por meio de entradas de usuário não higienizadas. Os tipos de ataque incluem clássico, booleano cego, baseado em tempo e baseado em UNION. A principal defesa são consultas parametrizadas — nunca concatene entradas de usuário em SQL. Use ORMs com cuidado, aplique contas de banco de dados com o mínimo de privilégios e desative mensagens de erro detalhadas.
Perguntas Frequentes
A aula “Injeção de SQL: como e por que funciona” é grátis?
Sim — o texto completo de “Injeção de SQL: como e por que funciona” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Injeção de SQL: como e por que funciona”?
Entenda a SQLi clássica, cega e fora de banda, além de descobrir por que consultas parametrizadas a impedem. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Injeção de SQL: como e por que funciona”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Injeção de SQL: como e por que funciona
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Configuração incorreta de segurança e serviços expostos