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.
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:
|
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.
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.
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.
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 |
- |
Share your suggestions with us!
Click here and then [+ Submit idea]