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.
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.
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.
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 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.
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.
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.
Last updated
Was this helpful?