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;

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

  • Query Params: verifica parâmetro por parâmetro à procura de um ataque;

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

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

sql threat request

Quando inserido também no fluxo da resposta, há duas outras opções:

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

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

sql threat response

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

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

  • Resposta: Body, Headers.

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

Share your suggestions with us!
Click here and then [+ Submit idea]