A Injeção de SQL (SQL Inject), mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL.
A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação.
Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:
SELECT id, nome FROM autores;
Essa instrução, que representa uma consulta na base de dados, retorna todos os registros das colunas “id”, “nome” e “sobrenome” da tabela “autores”.
A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto no exemplo abaixo:
SELECT id, nome FROM autores WHERE nome = 'benedito' AND sobrenome = 'silva';
Com base nesta instrução, é fácil supor que “benedito” e “silva” são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.
Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples. Gerando a entrada:
nome = bene’dito
sobrenome= silva
E fazendo com que a aplicação gere o código:
SELECT id, nome FROM autores WHERE nome = 'bene'dito' AND sobrenome = 'silva';
De acordo com a especificação da linguagem SQL, existe um erro de sintaxe nessa instrução, uma vez que a string passada para o campo nome é a apenas palavra “jo”, pois a adição das aspas simples quebrou a delimitação das aspas simples originais da consulta.
O interpretador do SQL espera que o restante da instrução seja outros comandos SQL válidos que complementem a instrução principal.
No entanto, como “dito” não é um identificador válido, essa instrução não será executada e retornará um erro.
Com base neste problema, um possível atacante pode manipular os dados de entrada a fim de gerar um comportamento não esperado na base de dados.
Para exemplificar este conceito, consideremos na mesma consulta apresentada, a entrada dos seguintes dados pela aplicação:
nome = bene’; DROP TABLE autores;
sobrenome = silva
Fazendo com que a aplicação gere o código:
SELECT id, nome FROM autores WHERE nome = 'bene'; DROP TABLE autores;
Neste caso, a instrução será executada normalmente, pois não há um erro de sintaxe, no entanto, com a adição do caractere ponto-e-vírgula, a instrução foi dada como finalizada de modo prematuro dando espaço para uma nova instrução.
Essa nova instrução, que poderia ser qualquer uma escolhida pelo atacante, pode ser a responsável por retornar dados confidenciais armazenados na base de dados ou de executar instruções que comprometam o sistema, como a remoção de dados e/ou tabelas, como pode ser visto no exemplo apresentado.
CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS DETALHES:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários