Envio de SMS com retorno falso positivo

Nesse caso de uso o envio do SMS é feito e espera-se para cada requisição HTTP um retorno 200 OK como sucesso do envio, porém um firewall está bloqueando as requisições e retornando 200 OK.

Público alvo deste caso de uso

Analista de IAM, ou qualquer outro profissional que será responsável pela administração do Blazon.

Objetivo

Esse cenário tem como objetivo descrever como realizar as configurações adequadas do provedor de SMS de forma a evitar falsos positivos mesmo quando um retorno 200 OK acontece mas não significa sucesso no envio do SMS.

Descrição

No ambiente de execução deste cenário, entre o Blazon e a API de SMS, existe um firewall de camada 7 que intercepta as mensagens HTTP de envios de SMS.

Por configuração esse firewall intercepta e retorna uma página HTML descrevendo um "erro" de Página bloqueada, mas com código de retorno 200 OK.

Como o firewall bloqueia as requisições mas retorna 200 OK, a simples validação do retorno das requisições HTTP com base no código de status 200 vai gerar falsos positivos.

Requisição

Essa seção apresenta na tabela abaixo as definições relacionadas à requisição HTTP para o envio do SMS usando uma API externa.

Item
Valor

Método HTTP

POST

URL

https://sms.services/api/send-sms.php

Segurança

Autenticação HTTP básica

Cabeçalhos

  • Accept: application/json

  • Content-Type: application/json

Body

{
  "telefone": "34---------",
  "mensagem": "Token de autenticação Blazon: 154567"
}

Com as configurações acima a API envia um SMS para o telefone descrito no JSON do body, contendo a mensagem definida juntamente com o token de acesso.

Resposta

Essa seção apresenta as configurações das respostas HTTP esperadas tanto da API de SMS quanto do firewall quando ele realiza o bloqueio do envio do SMS.

Resposta da API de SMS

A tabela abaixo descreve as informações de retorno da API de SMS quando o envio ocorre com sucesso.

Item
Descrição

HTTP STATUS

200 OK

Body

{
    "status": "SUCESSO"
}

Response-type

application/json

Resposta do firewall

A tabela abaixo descreve as informações de retorno do firewall quando ele realiza o bloqueio do envio do SMS.

Item
Descrição

HTTP STATUS

200 OK

Body

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Página Bloqueada!</title>
</head>
<body>
    <h1>Essa página está bloqueada!</h1>
</body>

Response-type

text/html

Nas duas tabelas observa-se que o código HTTP de retorno é 200 com status HTTP OK.

Nesse caso se configurarmos o provedor SMS com um retorno validando apenas o código HTTP e o firewall bloquear a mensagem, vai gerar um envio com SUCESSO o que não é verdade.

Configurações

As configurações descritas nessa seção são referenciadas na documentação do Administrador na página Configurando um provedor de SMS.

Configurações da Requisição

Todas as configurações são realizadas no detalhamento do provedor na aba Configurações:

  • O método HTTP e URL são definidos no topo do card da aba de Configurações;

  • A configuração de Segurança é feita na aba Segurança selecionando o tipo "Autenticação HTTP Básica";

  • A configuração dos cabeçalhos é feita na aba Cabeçalhos, adicionando-se os dois cabeçalhos descritos;

  • A configuração do Body é feita na aba Body, configurando o media-type application/json e com o conteúdo:

    • {
        "telefone": "${[to]}",
        "mensagem": "Token de autenticação Blazon: ${[token]}"
      }

Configuração dos Retornos

A configuração dos retornos, feito na aba Retornos, deve evidenciar quando o retorno 200 OK é do firewall (falha no envio) e quando o retorno 200 OK é da API (sucesso no envio). Qualquer coisa diferente disso será considerado como falha no envio.

Dado o cenário e o fato de que os retornos são avaliados na ordem, sugere-se a seguinte configuração dos Retornos:

Retorno
Descrição

Retorno do firewall

retorno quando o código HTTP é 200 e no corpo da resposta tem o texto HTML com o termo "Página Bloqueada!". Será considerado como FALHA.

Retorno da API de SMS

retorno quando o código HTTP é 200 e não cai no retorno anterior. Será considerado como SUCESSO.

Retorno padrão

retorno diferente do que está definido nos retornos anteriores. Será considerado como FALHA.

Analisando os retornos acima, observa-se que qualquer retorno 200 OK que voltar pro Blazon, será antes verificado se é um retorno proveniente do firewall caso que será definido como FALHA.

Caso não seja do firewall, o retorno 200 OK vai casar com a definição do retorno da API e será definido como SUCESSO.

Qualquer coisa diferente disso vai cair no retorno padrão que será considerado como FALHA.

As configurações dos retornos descritos, na tabela acima, estão detalhadas abaixo:

Retorno do firewall

Como o retorno do firewall tem que validar um termo "Página Bloqueada!" no corpo da resposta sugere-se a configuração usando um script BeanShell.

Campo
Valor

Tipo

Script

Valor

body = (String) httpResponse.payload;
ehCodigo200 = httpResponse.httpCodeStatus == 200;
ehPaginaDeBloqueio = body.contains("Página Bloqueada!");
return ehCodigo200 && ehPaginaDeBloqueio;

Status

Falha

Situação

Falha no envio

Observa-se que no script o corpo da mensagem é lido na variável httpResponse.payload e o código de retorno é lido na variável httpResponse.httpCodeStatus.

Caso o corpo contenha o termo "Página Bloqueada!" e o código de retorno seja 200 tem-se o resultado TRUE o que configura um retorno do firewall e portanto seŕa definido como FALHA no envio.

Retorno da API de SMS

Como esse retorno tem que validar apenas o código HTTP 200 sugere-se a configuração usando o tipo Código HTTP que é mais simples e direta.

Campo
Valor

Tipo

Código HTTP

Valor

200

Status

Sucesso

Situação

OK

Na configuração desse retorno, uma vez que já foi verificado que não é um retorno do firewall devido a ordem de avaliação, basta que seja verificado que o código HTTP de retorno seja igual a 200 o que configura um SUCESSO no envio.

Nota

A configuração do retorno padrão é intuitiva e basta definir o status como Falha e definir a situação como Falha no envio do SMS.

Nesse caso qualquer coisa que retornar diferente do que foi configurado nos retornos anteriores será dado como FALHA.

Last updated

Was this helpful?