Artigo
· 8 hr atrás 4min de leitura

Injection SQL - uma ameaça vencida ?

De acordo com o relatório OWASP Top Ten de 2021, um documento de referência na área de segurança de aplicações web, as injeções SQL ocupam a terceira posição entre os riscos mais críticos. Este relatório, disponível em OWASP Top 10: Injection, destaca a gravidade dessa ameaça e a necessidade de implementar medidas de proteção eficazes.

Uma injeção SQL ocorre quando um atacante malicioso consegue inserir código SQL não autorizado em uma consulta enviada a um banco de dados. Esse código, disfarçado nas entradas do usuário, pode então ser executado pelo banco de dados, causando ações indesejáveis como o roubo de dados confidenciais, a modificação ou a exclusão de informações sensíveis, ou ainda a interrupção do funcionamento da aplicação.

O que devemos procurar para evitar a injeção SQL ?

Uma aplicação é vulnerável a ataques quando:

  • Les données fournies par l'utilisateur ne sont pas validées, filtrées ou nettoyées par l'application.
  • Requisições dinâmicas ou chamadas não parametrizadas sem escape sensível ao contexto são usadas diretamente no interpretador.
  • Dados maliciosos são usados nos parâmetros de pesquisa de mapeamento objeto-relacional (ORM) para extrair registros adicionais e sensíveis.
  • Dados maliciosos são usados diretamente ou concatenados. O SQL ou o comando contém a estrutura e os dados maliciosos em requisições dinâmicas, comandos ou procedimentos armazenados.

As injeções mais comuns são SQL, NoSQL, de comando OS, de mapeamento objeto-relacional (ORM), LDAP e Expression Language (EL) ou Object Graph Navigation Library (OGNL). O conceito é idêntico para todos os interpretadores.

Antes de aprofundar as técnicas de prevenção, é crucial compreender como as injeções SQL funcionam.

Atacadores podem explorar entradas de usuário não validadas para injetar código SQL malicioso em uma consulta. Por exemplo, se um usuário pode inserir um valor em um campo de pesquisa e esse valor é inserido diretamente em uma consulta SQL sem validação (por exemplo, set query = "SELECT * FROM Company.Accounts WHERE custID="_custID), um atacante poderia inserir uma cadeia de caracteres como "1 union select * from Company.Accounts" para obter detalhes de todas as contas

Felizmente, o InterSystems IRIS oferece diversos mecanismos para prevenir injeções SQL:

  • Utilisação de parâmetros preparados.O uso de parâmetros preparados é um dos métodos mais eficazes para prevenir injeções SQL. Eles separam a estrutura da consulta dos valores de entrada, impedindo que atacantes injetem código SQL malicioso. Por exemplo, o código
 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Library.Book where ID = ?")
 SET rs = statement.%Execute("3 union select * from library.Book")
 DO rs.%Display()

não retorna nada.

Enquanto

 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Library.Book where ID = ?")
 SET rs = statement.%Execute("3")
 DO rs.%Display()

retorna a informação :

  • Validação das entradas utilizadas. Validar as entradas utilizadas antes de inserir nas requisições SQL é outra medida importante de prevenção. Utilize as expressões regulares ou as funções de validação apropriadas para verificar a validade dos dados. Por exemplo, se nós utilizarmos o código postal como parâmetro da requisição, devemos verificar que só tem caracteres numéricos e em geral comporta 5 caracteres.
 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Post.Address WHERE ZIP = ?")
 READ "Enter ZIP code: ", zip
 if zip?5N {
    SET rs = statement.%Execute(zip)
    DO rs.%Display()
    }

Esse código retorna

  • Utilização de padrões nas descrições de classe. Similar ao ponto anterior, mas permite verificar a entrada ao adicionar novas instâncias.
  • Filtro de caracteres especiais
    • Filtrar os caracteres especiais que podem ser utilizados para injetar código SQL também pode ajudar a prevenir ataques. Utilize funções de filtragem apropriadas para remover ou escapar os caracteres potencialmente perigosos.
  • Utilização de procedimentos armazenados.
    • Procedimentos armazenados são objetos de banco de dados que encapsulam um conjunto de instruções SQL. Utilizando procedimentos armazenados, você pode centralizar a lógica de sua aplicação e reduzir o risco de injeções SQL.
  • Atualização regular dos componentes de software.
    • Certifique-se de atualizar regularmente o InterSystems IRIS e os componentes de software relacionados para beneficiar dos últimos corretivos de segurança.

Em conclusão, as injeções SQL representam uma ameaça significativa à segurança de aplicações web. Ao seguir os métodos de prevenção descritos neste artigo, é possível reduzir consideravelmente o risco de ataques de injeção SQL em suas aplicações InterSystems IRIS. A combinação de diversas técnicas de prevenção é fundamental para garantir a máxima proteção.

Discussão (0)1
Entre ou crie uma conta para continuar