
Injeção SQL (SQL Injection ou SQLi) é uma vulnerabilidade de segurança em aplicações web que permite a um atacante inserir comandos SQL maliciosos em campos de entrada (formulários, URLs, cookies ou cabeçalhos HTTP), com o objetivo de manipular a base de dados da aplicação.
Trata-se de uma das falhas mais antigas e perigosas da segurança na internet, ainda hoje responsável por roubo massivo de dados, compromissos de lojas online e violações graves de privacidade.
Porque a Injeção SQL acontece
A SQLi ocorre quando a aplicação:
- Constrói queries SQL dinamicamente
- Não valida nem filtra corretamente os dados fornecidos pelo utilizador
- Insere diretamente esses dados numa query SQL
Ou seja, o sistema confia em dados não confiáveis.
Exemplo simplificado (conceitual)
Em vez de tratar o input apenas como texto, a aplicação permite que ele seja interpretado como código SQL, alterando a lógica da consulta.
O que um ataque de Injeção SQL permite fazer
Dependendo da gravidade, um atacante pode:
- Contornar autenticação (login sem password)
- Ler dados sensíveis da base de dados
- Roubar dados de clientes (emails, passwords, moradas)
- Modificar ou apagar registos
- Criar ou remover utilizadores
- Obter acesso administrativo
- Executar comandos no servidor (em casos avançados)
Em lojas online, isto pode significar exposição total da base de dados de clientes.
Tipos principais de Injeção SQL
Injeção SQL clássica (In-band SQLi)
O atacante obtém resultados diretamente na resposta da aplicação.
Blind SQL Injection
A aplicação não mostra erros nem resultados, mas o atacante deduz informação através de:
- Respostas verdadeiras/falsas
- Diferenças de comportamento
Time-based Blind SQLi
O atacante força atrasos (delays) para confirmar se a query foi executada.
Out-of-band SQLi
Os dados são enviados para um servidor externo controlado pelo atacante.
Onde a Injeção SQL é mais comum
A SQLi aparece frequentemente em:
- Formulários de login
- Campos de pesquisa
- URLs com parâmetros
- Painéis de administração
- APIs mal protegidas
- Lojas online com código antigo
- Plugins e módulos vulneráveis
CMS e extensões desatualizadas são um vetor comum.
Consequências de uma Injeção SQL
Os impactos são geralmente críticos:
- Violação de dados pessoais (RGPD)
- Roubo de dados bancários
- Perda de confiança dos clientes
- Multas e sanções legais
- Comprometimento total da aplicação
- Paragem do negócio
- Custos elevados de recuperação
Uma única falha pode expor anos de dados acumulados.
Sinais de possível Injeção SQL
Alguns indícios técnicos incluem:
- Erros SQL visíveis no site
- Comportamento estranho em formulários
- Dados exibidos incorretamente
- Lentidão anormal após certos inputs
- Logs com caracteres SQL suspeitos (‘, “, –, 😉
- Acessos não autorizados à base de dados
A deteção precoce é fundamental.
Como prevenir Injeções SQL
A prevenção é bem definida e eficaz quando aplicada corretamente:
- Prepared Statements / Queries parametrizadas
- ORMs seguros
- Validação rigorosa de inputs
- Escapar caracteres especiais
- Princípio do menor privilégio na base de dados
- Ocultar mensagens de erro SQL
- Atualizar frameworks, CMS e plugins
- Utilizar WAF (Web Application Firewall)
- Auditorias de código e testes de segurança
Hoje, não há justificação técnica para SQLi em software moderno.
Injeção SQL e lojas online
Para lojas online, a SQLi é especialmente perigosa porque pode expor:
- Dados pessoais de clientes
- Passwords (mesmo com hash)
- Histórico de encomendas
- Moradas e contactos
- Dados administrativos
- Chaves de API e integrações
É uma das vulnerabilidades mais fiscalizadas em auditorias de segurança.
Importância da SQLi na segurança da internet
A Injeção SQL está presente no OWASP Top 10 há anos, devido ao seu impacto elevado e frequência. Apesar de ser uma vulnerabilidade conhecida, continua a existir por más práticas de desenvolvimento.
Conclusão
Injeção SQL (SQLi) é uma vulnerabilidade que permite manipular bases de dados através de entradas maliciosas, causando roubo de dados, acessos não autorizados e compromissos graves de sistemas.
A sua prevenção depende de boas práticas de desenvolvimento, validação rigorosa de dados e manutenção contínua. Quando ignorada, os danos são quase sempre críticos.
