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.
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.
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:
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.
Artigos Relacionados