O que é SQL Injection?
Imagine que você tem um formulário de login. O código “espera” que o usuário digite um e-mail. Mas, em vez de um e-mail, o invasor digita um comando de banco de dados. Se o seu código não estiver protegido, o banco de dados executará esse comando malicioso.
O perigo: Um invasor pode apagar tabelas inteiras, roubar senhas ou visualizar dados sensíveis de todos os seus usuários.
A Regra de Ouro: Nunca confie no usuário
O erro mais comum é concatenar (juntar) strings diretamente na sua query SQL.
Exemplo do que NÃO fazer (Vulnerável):
-- PHP / Exemplo Genérico
$query = "SELECT * FROM users WHERE email = '" . $email_digitado . "'";
Se o usuário digitar ' OR '1'='1, a query vira: SELECT * FROM users WHERE email = '' OR '1'='1'. Isso daria acesso ao sistema sem uma senha válida!
Como prevenir de forma correta?
A solução definitiva é o uso de Prepared Statements (Declarações Preparadas) com Parameterized Queries (Consultas Parametrizadas).
1. Use Prepared Statements
Em vez de enviar a query com os dados juntos, você envia primeiro o “molde” da query para o banco e depois envia apenas os dados. O banco de dados trata o dado apenas como texto, nunca como comando.
Exemplo correto (usando PDO no PHP):
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $userEmail]);
$user = $stmt->fetch(); 2. Validação e Sanitização
Antes mesmo de chegar ao banco, verifique se o dado faz sentido:
Um campo de idade deve ser apenas números.
Um campo de e-mail deve ter o formato
nome@dominio.com.
3. Princípio do Menor Privilégio
Não use o usuário “root” do banco de dados na sua aplicação. Crie um usuário que só tenha permissão para fazer o que é estritamente necessário (como SELECT, INSERT e UPDATE em tabelas específicas).
Resumo para o seu dia a dia
| Prática | O que fazer |
| Consultas | Sempre use Prepared Statements. |
| Bibliotecas | Utilize ORMs renomados (como Eloquent, Hibernate ou Sequelize). |
| Entradas | Valide o tipo de dado (String, Int, Email). |
| Erros | Nunca exiba erros reais do SQL para o usuário final. |
Conclusão
Segurança não é um recurso extra, é parte do código base. Usar consultas parametrizadas é o passo mais simples e eficaz para garantir que seus dados (e os dos seus clientes) estejam seguros.