Estendemos o Black Friday! 🔥🔥🔥

Agora, termina em:

Dia
Horas
Minutos
Segundos
Search
Close this search box.

Funcionamento do SQL Injection ou Injeção de SQL

Picture of Adriano Martins Antonio

Adriano Martins Antonio

em 10 de abril de 2020

Fique ligado

​Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Conheça o funcionamento do SQL Injection ou Injeção de SQL e entenda o que ele representa para os sistemas

Você sabe o que é SQL Injection ou Injeção de SQL? Bem, por definição, esse é um termo que indica um tipo de ameaça que usa falhas existentes em sistemas, para interagir com o banco de dados dos mesmos, através de comandos SQL.

SQL Injection ou Injeção de SQL- Pra Que Serve?

Vivemos em um cenário onde temos diversas informações armazenadas em algum banco de dados.

Desse modo, quando aplicações que são acessadas pela internet usam esses bancos de dados, elas se tornam alvo de ataques do tipo SQL Injection.

Assim, esse tipo de ataque serve para alterar e manipular informações do banco, comprometendo à integridade dos dados armazenados e, consequentemente, causando um grande transtorno.

Como Funciona

Ao acessar uma aplicação via web, caso o sistema apresente falhas de segurança, o intruso poderá acessar formulários do site e passar instruções SQL, através do campo destinado para o usuário digitar informações.

Com isso, o invasor consegue alterar diversos dados na aplicação, sem possuir o devido acesso ou autorização.

Afinal, isso se trata de um ataque que pode causar muitos danos ao banco, mas que pode ser evitado com o uso de boas práticas de programação, que possibilitam otimizar o processo de segurança da informação.

Homem trabalhando no computador fazendo boas práticas da programação SQL
A sigla SQL significa Structured Query Language, que em português, a tradução se dá como Linguagem Estruturada de Dados

Em contrapartida, as boas práticas podem ser implementadas no próprio servidor de banco de dados, como também podem ser implementadas dentro do código fonte, independente da linguagem de programação utilizada.

Para entender melhor o funcionamento de um ataque com SQL Injection, vamos ver alguns exemplos, para esclarecer melhor a questão nesse ínterim.

Exemplos:

Com objetivo de exemplificar o funcionamento do SQL Injection, vamos analisar a situação apresentada a seguir.

Conforme você pode notar, abaixo listamos uma tela de Login. Sendo assim, considere a seguinte instrução SQL de autenticação validada:

SELECT * FROM tb_usuarios WHERE user = ‘campo_usuario’ AND pass = ‘campo_senha’

Esta consulta busca no banco de dados um usuário que contenha as respectivas informações digitadas pelo usuário.

login limpo SQL Injection

Neste caso, a consulta buscaria no banco o usuário com nome de acesso ‘Ana’ e ‘senha ‘123456’.

No entanto, imagine outra situação em que  a pessoa mal intencionada deseja verificar a vulnerabilidade da aplicação. Todavia, se esta pessoa digitar uma informação, como exemplificado na tela a seguir, ela obterá um acesso indevido, podendo prosseguir com o seu ataque:

Login sujo SQL Injection

Neste caso, teríamos uma consulta da seguinte forma:

SELECT * FROM tb_usuarios WHERE user = ‘teste’ AND pass = ‘ ‘ or ‘1’ = ‘1’

O comando ‘ ‘ or ‘1’ = ‘1’ faz com que o usuário e a senha informados sejam sempre verdadeiros, permitindo assim o acesso indevido ao sistema.

Então, para evitar este tipo de ataque, na linguagem de programação deve ser implementando funções que validem os dados de entrada, a fim de impedir a execução de comandos indevidos.

Exemplo Básico de Um Código PHP Para Tratar a Execução de Querys e Evitar o SQL Injection:

? php

$usuario = $_POST[‘user’];

$senha = $_POST[‘pass’];

$user_escape =addslashes($usuario);

$pass_escape = addslashes($senha);

$query_string = “SELECT * FROM tb_usuarios WHERE user = ‘{$user_escape}’ AND senha = ‘{$pass_escape}'”;

?>

Ademais, a função addslashes () adicionará uma barra invertida antes de cada aspa simples e aspa dupla encontrada. Com esse tratamento, a query resultante seria:

SELECT * FROM usuarios WHERE codigo = ” AND senha = ‘\’ or 1=\’1′

Assim se evita que o invasor consiga o acesso indevido. Em princípio, uma outra dica importante, é evitar exibir mensagens de erro em um servidor de aplicação que esteja em produção.

Leia também: 

Pois, as mensagens e alertas podem exibir caminhos de diretórios de arquivos e eventualmente, outras informações relevantes sobre o esquema do banco de dados, o que é capaz de comprometer a segurança da aplicação.

Facebook
Twitter
LinkedIn

Artigos Relacionados

Deixe um comentário

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