image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Giuliano Criscuoli
Giuliano Criscuoli19/01/2025 20:37
Compartilhe

O mínimo que você deveria saber sobre SQL Injection

  • #PHP
  • #SQL
  • #MySQL

1. O que é SQL Injection?

SQL Injection é uma vulnerabilidade que permite a execução de comandos SQL maliciosos, manipulando consultas ao banco de dados através da entrada de dados do usuário. Isso acontece quando um sistema não valida ou escapa adequadamente os dados inseridos, permitindo que um atacante injete comandos que o sistema trata como legítimos.

2. Como Funciona?

Isso ocorre por más práticas de consultas ao escrevermos nossas querys no código. Geralmente dados que não foram bem tratados ou tecnicamente falando, não foram sanitizados de forma correta, permitindo que o usuário mal intencionado possa modificar, manipular ou excluir dados na base dos nossos sistemas.

3. Exemplo Prático de SQL Injection

Imagine que temos uma aplicação com o seguinte código PHP para verificar login:

$query = "SELECT * FROM usuarios WHERE nome = '$nome' AND senha = '$senha'";

Se um hacker inserir "admin' --" no campo nome, a consulta se torna:

SELECT * FROM usuarios WHERE nome = 'admin' --' AND senha = '$senha'

O trecho -- comenta o restante da linha, ignorando a verificação da senha e permitindo o login sem autenticação.

Vamos supor que um formulário de pesquisa no site permita a inserção direta de uma cláusula SQL:

$query = "SELECT * FROM produtos WHERE descricao LIKE '%$palavra%'";

Se o usuário insere: %' OR '1'='1, a consulta se torna:

SELECT * FROM produtos WHERE descricao LIKE '%%' OR '1'='1'

Isso retorna todos os produtos, ignorando a filtragem, e pode ser usado para expor informações sensíveis.

4. Como Evitar SQL Injection?

  • Consultas Parametrizadas: Usar parâmetros ao invés de concatenar strings. Exemplo:
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE nome = :nome AND senha = :senha");
$stmt->execute(['nome' => $nome, 'senha' => $senha]);
  • ORMs (Object-Relational Mapping): Ferramentas como Eloquent (Laravel) que abstraem consultas SQL.
  • Validação e Escapamento: Sempre valide e escape dados de entrada. Exemplo:
$nome = $pdo->quote($_POST['nome']);
$query = "SELECT * FROM usuarios WHERE nome = $nome";

Redes Sociais

🔗 GitHub: github.com/GiulianoCriscuoli

🔗 LinkedIn: Giuliano Criscuoli

🔗 Instagram: @southlaser

Compartilhe
Comentários (1)
Edilson Silva
Edilson Silva - 19/01/2025 20:53

Obrigado pela informação!