Definição – o que significa injeção de SQL?
Uma injeção de SQL é um ataque de computador no qual um código malicioso é incorporado em um aplicativo mal projetado e, em seguida, passado para o banco de dados de back-end. Os dados maliciosos produzem resultados de consulta de banco de dados ou ações que nunca deveriam ter sido executadas.
Definirtec explica injeção de SQL
Vejamos um exemplo de ataque de injeção SQL:
Um aplicativo que executa as operações de um banco contém menus que podem ser usados para pesquisar detalhes do cliente usando pontos de dados como o número do seguro social do cliente. Em segundo plano, o aplicativo chama uma consulta SQL que é executada no banco de dados, passando os valores de pesquisa inseridos da seguinte maneira:
SELECT nome_do_cliente, telefone, endereço, data_de_birth WHERE social_sec_no = 23425
Neste script de amostra, o usuário insere o valor 23425 na janela do menu do aplicativo, solicitando que o usuário insira o número do Seguro Social. Em seguida, utilizando o valor fornecido pelo usuário, uma consulta SQL é executada no banco de dados.
Um usuário com conhecimento de SQL pode entender o aplicativo e, em vez de inserir um único valor quando solicitado pelo número do Seguro Social, insira a string “23425 ou 1 = 1”, que é passada para o banco de dados da seguinte forma:
SELECIONE client_name, telefone, endereço, date_of_birth WHERE social_sec_no = 23425 ou 1 = 1
A cláusula WHERE é importante porque apresenta vulnerabilidade. Em um banco de dados, a condição 1 = 1 é sempre verdadeira e, como a consulta foi especificada para retornar detalhes do número do seguro social do cliente (23425) ou WHERE 1 = 1, a consulta retornará todas as linhas da tabela, o que não era o Intenção original.
O exemplo de ataque de injeção de SQL acima é simples, mas mostra como explorar uma vulnerabilidade para enganar o aplicativo e fazê-lo executar uma consulta ou comando de banco de dados de back-end.
Os ataques de injeção de SQL podem ser atenuados garantindo-se um design de aplicativo adequado, especialmente em módulos que exigem entrada do usuário para executar consultas ou comandos de banco de dados. No exemplo acima, o aplicativo pode ser alterado para aceitar apenas um valor numérico.