Fundamentos de SQL Injection — Resumo para Trabalho Escolar
1. O que é SQL Injection
SQL Injection é uma técnica utilizada para manipular consultas SQL através de entradas de
usuário, permitindo modificar a consulta original enviada ao banco de dados. Isso só ocorre
quando o sistema está vulnerável e não realiza tratamento adequado dos dados.
2. Como Saber se um Sistema é Vulnerável
Um sistema pode estar vulnerável se:
• Usa variáveis diretamente na query (ex: "SELECT * FROM usuarios WHERE
email='$email'")
• Não usa prepared statements
• Não filtra nem valida entradas
• Exibe erros SQL na tela
• Utiliza senhas em texto puro no banco de dados
3. Tipos Comuns de SQL Injection
• Login Bypass
Exemplos de payloads:
' OR 1=1 --
' OR '1'='1
qualquercoisa' OR 'x'='x
• Union-Based Injection
' UNION SELECT 1,2,3 --
• Error-Based Injection
' ORDER BY 5 --
• Blind Injection
' AND 1=1 --
' AND 1=2 --
4. Como Testar SQL Injection com Segurança
Sempre em ambiente local, como XAMPP, Postman ou Burp Suite. O navegador pode
bloquear caracteres especiais em inputs tipo “email”, então é comum mudar para
type="text" ou enviar a requisição diretamente via ferramenta externa (Postman, Burp,
cURL).
5. Como Corrigir SQL Injection
• Usar prepared statements:
Exemplo com PDO:
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE email = :email AND senha
= :senha");
$stmt->execute([":email" => $email, ":senha" => $senha]);
• Nunca armazenar senha em texto puro
Usar password_hash e password_verify.
• Filtrar entradas
filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
• Desabilitar erros em produção
ini_set('display_errors', 0);
6. Resumo Final
• SQL Injection acontece quando entradas do usuário são inseridas sem tratamento nas
consultas SQL.
• Existem diversos tipos de SQLi, como login bypass, union-based, error-based e blind.
• A forma definitiva de evitar SQL Injection é usar prepared statements.