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):

SQL
-- 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áticaO que fazer
ConsultasSempre use Prepared Statements.
BibliotecasUtilize ORMs renomados (como Eloquent, Hibernate ou Sequelize).
EntradasValide o tipo de dado (String, Int, Email).
ErrosNunca 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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *