Introdução à injeção de SQL
- A injeção de SQL é uma vulnerabilidade ou uma técnica que pode destruir o banco de dados de um site ou aplicativo da web. É um dos ataques baseados na web mais usados.
- O principal objetivo de uma injeção de SQL é obter acesso ao banco de dados de um site. Portanto, para que uma injeção de SQL funcione, é necessário um aplicativo da Web que esteja conectado a um banco de dados.
- Como o banco de dados possui todos os dados, incluindo a senha do administrador, ou seja, a senha de login do proprietário, o invasor do site pode acessar a página de administração para editar o site preenchendo um formulário da web.
- O formulário da web inclui nome de usuário e senhas. Quando o usuário insere algo no campo de entrada do formulário da web, a consulta SQL SELECT é implementado no banco de dados.
- O sistema tenta combinar as entradas, ou seja, o nome de usuário e a senha inseridos pelo usuário com o nome de usuário e a senha que já estão armazenados no banco de dados. Se ambas as entradas corresponderem, o usuário obterá o acesso, caso contrário, o acesso será negado ao usuário.
- Existem alguns sites que não possuem o mecanismo para bloquear qualquer outra entrada. Esses sites são vulneráveis à injeção de SQL. Nesse caso, qualquer consulta SQL pode ser alimentada como entrada e o sistema a executará.
- Por exemplo, o invasor pode inserir uma consulta para baixar todo o banco de dados, excluir o banco de dados, modificar o banco de dados e tornar a condição sempre verdadeira. Se uma condição de senha for sempre verdadeira, não importa se alguma senha for inserida. Para a senha, o sistema acessa as que estão armazenadas no banco de dados, mas se for feita uma consulta para descartar a tabela de senhas no banco de dados, o sistema começará a receber qualquer senha. Dessa forma, o invasor pode acessar o banco de dados facilmente. Agora ele pode conhecer todas as senhas das pessoas logadas no site, as várias tabelas e seus conteúdos, a estrutura interna do site e qualquer outra informação relacionada ao site.
- Esse método é chamado de injeção de SQL, no qual você injeta uma consulta no banco de dados para manipulá-lo e obter acesso não autorizado a ele. Este é o tipo mais perigoso de ataque ao site para um banco de dados baseado em SQL.
- Uma maneira de evitar esses ataques é bloquear as entradas desnecessárias além de nomes de usuário e senhas.
- Os comandos de injeção de SQL são feitos em tempo de execução. Portanto, evite comandos de entrada dinâmicos. Impeça o banco de dados com firewall de aplicativo da Web . Além disso, não revele nenhuma informação confidencial sobre o site a ninguém.
- Os sites podem sofrer enormes perdas financeiras e de dados devido a esses ataques SQL.
Exemplo:
Suponha que, existe um aplicativo da web com um banco de dados conectado a ele. Esse aplicativo da Web pode receber a entrada do usuário e armazenar as informações no banco de dados ou buscar os dados do banco de dados e exibi-los ao usuário.
Em ambos os casos, há uma consulta SQL ou consulta de banco de dados que é gerada no aplicativo da web que é enviada ao banco de dados e essa consulta é executada no banco de dados e as informações relevantes são retornadas ao aplicativo da web. É assim que o cenário normal funciona.
Assim, quando o invasor usa injeção de SQL, ele tenta manipular essa consulta de banco de dados para fazê-la fazer algo que, idealmente, não deveria fazer. Assim, o invasor altera a consulta SQL, manipula-a, injeta alguma string maliciosa na consulta SQL e depois faz com que ela faça algo de maneira não autorizada. Então agora a consulta ao banco de dados é manipulada pelo invasor, então essa consulta maliciosa é enviada ao banco de dados, é executada lá e os resultados relevantes são retornados.
Isso é conhecido como injeção de SQL. A injeção de SQL é uma técnica de injeção de código usada para executar instruções SQL maliciosas e dinâmicas. Os ataques SQL são algo que o invasor usa para controlar os servidores de banco de dados.
Como evitar injeção de SQL
- Evite usar SQL dinâmico
As entradas fornecidas pelo usuário não devem ser colocadas diretamente na consulta SQL que será operada no banco de dados. Em vez de usar SQL dinâmico, deve-se fazer uso de procedimentos armazenados, instruções preparadas e consultas parametrizadas, pois são mais seguras em comparação com consultas SQL dinâmicas.
- As entradas fornecidas pelo usuário devem ser higienizadas
O tipo de dados que será fornecido pelo usuário deve ser devidamente correspondido e verificado com o tipo esperado.
- Dados confidenciais não devem estar em texto simples
Antes de armazenar os dados confidenciais, como senhas, no banco de dados, eles devem ser criptografados adequadamente com hashes. O salting deve ser aplicado aos hashes criptografados para fornecer uma camada extra de segurança aos dados confidenciais.
- Os erros do banco de dados não devem ser exibidos diretamente ao usuário
As informações de erro exibidas ao invasor podem ajudá-lo a obter informações sobre o banco de dados.