image

Accede a bootcamps ilimitados y a más de 650 cursos

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

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

Compartir
Comentarios (3)
Giuliano Criscuoli
Giuliano Criscuoli - 20/01/2025 15:43

Sempre bom contribuir. Obrigado pelos comentários!

DIO Community
DIO Community - 20/01/2025 14:53

Parabéns pelo artigo, Giuliano! A explicação sobre SQL Injection é clara, objetiva e extremamente relevante para quem trabalha com desenvolvimento de sistemas ou bancos de dados. Você conseguiu abordar tanto os conceitos básicos quanto exemplos práticos, o que facilita o entendimento de como essa vulnerabilidade funciona e os riscos que ela representa.

O destaque para boas práticas, como consultas parametrizadas, uso de ORMs e validação de entradas, é essencial para prevenir ataques e garantir a segurança das aplicações. Além disso, os exemplos práticos ajudam a visualizar como um ataque pode ocorrer e reforçam a importância de adotar medidas preventivas.

Edilson Silva
Edilson Silva - 19/01/2025 20:53

Obrigado pela informação!