Como corrigir um SQL Disclosure ?

Seguir

 

Risco

Alta

CVE / CWE

CWE-89, CWE-564

Tipo

Lógica ou Aplicação

Correção

Difícil

Problema:

 

O 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.

 

Blind SQL Injection

Esse método assemelha-se ao anterior, a diferença é que nesse caso a página possui uma certa segurança e o invasor não visualiza os dados do base de dados através da página web. O invasor descobre os dados desejados de 1 em 1 caractere, utilizando a função SUBSTRING do SQL em conjunto com uma verificação booleana.

 

Solução

 

As seguintes recomendações ajudará a mitigar o risco de ataques de SQL Injection:

 

  1. Limitar os tipos de caracteres que podem ser passados como parâmetros na aplicação configurando filtros.
  2. Garantir que todos os dados de entrada que são fornecidos pelo usuário são validados e filtrados, independentemente da relação do aplicativo com um banco de dados back-end.
  3. Limitar as permissões de acesso a base de dados, permitindo somente o necessário.
  4. Remova todos scripts de exemplos ou demo que possam permitir a execução de comandos na base de dados.
  5. Audite sua aplicação constantemente para identificar os parâmetros que são passados.

 

Para prevenir os ataques de SQL Injection em determinadas aplicações, você deve considerar adotar as seguintes práticas:

 

 

  • ASP.NET: Para proteger sua aplicação ASP.NET contra ataques de sql injection, execute as seguintes etapas:

 

  1. Usar a validação de solicitação do ASP.NET
  2. Restringir entradas
  3. Codificar saída não segura
  4. Usar parâmetros de comandos para consultas SQL
  5. Verificar se erros do ASP.NET não são retornados para o cliente

Os detalhes de cada etapa podem ser obtidas no endereço: https://msdn.microsoft.com/pt-br/library/ff648339.aspx



 

  • PHP: Para proteger sua aplicação PHP contra ataques de sql injection, execute as seguintes etapas:

 

 

  1. Use o addslashes() para adicionar barras invertidas na string antes de executar a chamada no banco de dados.
  2. Garantir que todos os dados de entrada que são fornecidos pelo usuário são validados e filtrados
  3. Nunca conecte ao banco de dados como um super-usuário ou como o dono do banco de dados. Use sempre usuários personalizados e com privilégios limitados.
  4. Verifique se uma entrada qualquer tem o tipo de dados experado. O PHP tem um grande número de funções de validação de entrada, desde as mais simples encontrada em Funções de Variáveis e em Funções de Tipo de Caracteres (ex.: is_numeric(), ctype_digit() respectivamente) além de usar o suporte a Expressões Regulares Compatível com Perl.
  5. Se a aplicação espera por entradas numéricas, considere verificar os dados com a função is_numeric(), ou silenciosamente mudar o seu tipo usando settype(), ou usar a representação númerica usando a função sprintf().
  6. Adicione aspas para cada valor não numérico especificado pelo usuário que será passado para o banco de dados com as funções de caracteres de escape (ex.: mysql_real_escape_string(), sqlite_escape_string(), etc.). Se um mecanismo de escape de caracter específico para o seu banco de dados não for disponível, as funções addslashes() e str_replace() podem ser úteis (dependendo do tipo de banco de dados). Veja o o primeiro exemplo. Como o exemplo mostra, adicionar aspas à parte estática da consulta não é suficiente, fazendo com que a consulta seja facilmente atacada.

Maiores detalhes podem ser obtidos no endereço: http://php.net/manual/pt_BR/security.database.sql-injection.php

 

 

  • Java: O risco de SQL Injection pode ser reduzido no Java através do uso de prepared statements ou uma combinação de stored procedures e callable statements. Mesmo utilizando essas opções, a validação de entrada ainda é necessária. A chave para a prevenção desse tipo de ataque, que acaba tendo como consequência as vulnerabilidades de SQL Disclosure e SQL Injection é a utilização da combinação de todos os métodos descritos anteriormente. Nenhum método por si só pode fornecer proteção total contra ataques de SQL Injection.

 

 

Tem mais dúvidas? Envie uma solicitação

Comentários

Powered by Zendesk