SQL Threat Protection

Este interceptor tem a função de bloquear ataques de injeção de SQL (SQL Injection, em inglês) na chamada a uma API que acesse um banco de dados.

SQL Injection é um ataque em que instruções SQL indevidas e maliciosas são inseridas dentro uma query do cliente para o servidor. Com isso, podem ser feitas desde operações de administração do banco de dados afetado (como troca de administrador e configurações de acesso) quanto manipulação indevida do seu conteúdo (como alteração ou deleção de dados e, claro, exposição de informações sensíveis).

Funcionamento

O interceptor funciona com base em uma expressão regular (regex) que valida o conteúdo de body, headers, cookies, query params e path params passados na requisição. Se a regex encontrar trechos que podem indicar uma injeção de SQL, a chamada é abortada e um erro é retornado (veja os erros possíveis abaixo).

Para reforçar a segurança, tornamos a regex mais restritiva a partir da Release 4.4.0.0 da Plataforma. Se você já utilizava o SQL Threat Protection em suas APIs antes, pode ser que experiencie problemas no tráfego de alguns dados que antes não eram barrados.

Um exemplo: caso seja enviada uma string contendo uma keyword e um complemento, o interceptor identifica uma ameaça e aborta a requisição. Nesse caso, você pode alterar a forma com que os dados trafegam, desmembrando a string em diferentes pares de chave e valor.

Atente-se para o envio de imagem em form-data. Nesses casos, o corpo é recebido como um array de bytes e, na decodificação, é possível que alguns caracteres sejam entendidos como injeção de SQL e a chamada seja abortada. Para evitar isso, é possível enviar a imagem convertida para Base64, como neste exemplo de corpo:

{
  "image": {
    "name": "image.jpeg",
    "content-type": "//content base64 encoded",
    "file": "base64string"
  }
}

Configuração

Embora o SQL Threat Protection possa ser inserido também no fluxo de resposta de uma API, é essencial que ele esteja no fluxo de requisição, pois os ataques mencionados acontecem na direção cliente → backend.

sql threat flow

Para configurar o interceptor, basta escolher pelo menos uma das opções de bloco a ser protegido.

Quando inserido no fluxo de requisição, as opções são estas:

  • Body: aplica a proteção ao corpo da requisição.

    • Ignore body when the key is 'Content/type' and the value is 'multipart/form-data': ignora o body se o Content/type tiver o valor multipart/form-data, podendo assim ignorar possíveis expressões reservadas pelo SQL que estejam contidas em arquivos enviados desta maneira.

  • Headers: aplica a proteção a todos os cabeçalhos, verificando cada um deles separadamente.

  • Query Params: verifica todo parâmetro à procura de um ataque.

  • Cookies: aplica a proteção em todos os cookies, verificando cada um deles separadamente.

  • Path Params: verifica todo parâmetro à procura de um ataque.

Quando inserido no fluxo da resposta, há apenas duas opções:

  • Body: aplica a proteção ao corpo da resposta.

    • Ignore body when the key is 'Content/type' and the value is 'multipart/form-data': ignorar o body se o Content/type tiver o valor multipart/form-data, podendo assim ignorar possíveis expressões reservadas pelo SQL que estejam contidas em arquivos enviados desta maneira.

  • Headers: aplica a proteção a todos os cabeçalhos, verificando cada um deles separadamente.

Se todas as opções forem selecionadas, as validações ocorrerão na seguinte sequência:

  • Requisição: Query Params → Body → Cookies → Headers → Path Params

  • Resposta: Body → Headers

sql threat

Os fluxos de requisição e resposta permitem expressões a serem ignoradas pelo interceptor, isso evita que a chamada seja interrompida quando há palavras ou caracteres reservados, mas dentro um contexto seguro. Para adicionar uma expressão, escreva no campo String e clique ADD, será ignorada em todos os blocos escolhidos acima, tenha em mente que é case-sensitive pelo que faz diferenciação de maiusculas e minisculas.

Toda expressão adicionada aumenta o tempo de processamento e assim a latência da requisição, especialmente se estiver validando mais de um bloco.

Sugerimos ter cuidado com as expressões que adicionar, especialmente se colocar algo muito amplo, pois pode deixar de validar uma palavra reservada do SQL.

Erros

Caso algum ataque de injeção seja identificado, os seguintes erros serão retornados:

Campos Erro Cód. HTTP Requisição Cód. HTTP Resposta

Body

SQL Injection attack identified in this API Body

400

500

Headers

SQL Injection attack identified in this API Headers

400

500

Query Params

SQL Injection attack identified in this API Query Params

400

-

Cookies

SQL Injection attack identified in this API Cookies

400

-

Path Params

SQL Injection attack identified in this API Path Params

400

-

Thanks for your feedback!
EDIT
How useful was this article to you?