JSON Threat Protection
JSON Threat Protection é um interceptor que valida o conteúdo de um JSON com base em quantidade de caracteres, profundidade e número de elementos para vários componentes. Isso evita com que ataques maliciosos com valores ilegítimos sejam bem-sucedidos.
Para configurar o interceptor, temos que preencher os números de validação, conforme a imagem abaixo. Na sequência, você pode ler a respeito de cada um dos campos.
Campos
Container depth
Especifica a profundidade de um objeto.
Exemplo de um JSON com profundidade 3:
{
"name": "Sensedia",
"city": {
"name": "Campinas",
"uf": {
"name": "SP"
}
}
}
Object entry count
Especifica a quantidade de atributos em um objeto.
Exemplo de um JSON com 4 atributos:
{
"city": {
"name": "Campinas",
"uf": "SP",
"foundation": 1774,
"population": 1204073
}
}
Object Entry name length
Especifica a quantidade de caracteres de um atributo.
Neste exemplo, a quantidade é de 4 caracteres:
{"city":"Campinas"}
Array element count
Especifica a quantidade de elementos dentro de um array.
Exemplo de array com 6 elementos:
{
"years": [
2000,
2001,
2002,
2003,
2004,
2005
]
}
String value length
Especifica a quantidade de caracteres do valor de qualquer atributo.
Neste exemplo, a quantidade é de 8 caracteres:
{"city":"Campinas"}
Skip response if fail
Dá a opção de pular a resposta no caso de falha. Quando essa opção estiver marcada, caso aconteça algum erro nas validações anteriores, o gateway não irá encaminhar a requisição para o backend, devolvendo-a imediatamente para o cliente. Essa opção será necessária quando o interceptor JSON Threat Protection estiver configurado ao mesmo tempo no fluxo de requisição e de resposta, evitando, assim, conflitos de validação.
Observações
-
Caso todos as propriedades do interceptor sejam preenchidos, a primeira validação que o gateway encontrar terá sua exceção disparada.
-
Quando quiser que a propriedade não seja validada, basta não preenchê-la (deixando o campo em branco).
-
Lembre-se que pelo menos uma das propriedades deve ser preenchida.
-
Por padrão REST, para as chamadas POST e PUT é necessário informar o HTTP header
Content-type: application/json
. Caso contrário, será retornado um erro "HTTP 415: Unsupported Media Type".
Fluxo
O interceptor poder ser inserido tanto no fluxo de requisição quanto no de resposta, conforme mostra a imagem abaixo:
Erros
Abaixo temos os erros que podem ser retornados quando o interceptor encontra uma irregularidade.
Título | Erro | Cód. HTTP - Requisição | Cód. HTTP - Resposta |
---|---|---|---|
JSON |
Json format invalid |
400 |
500 |
Container depth |
Container depth limit exceeds the maximum allowed for this API (10) |
400 |
500 |
Object entry count |
Object entry count limit exceeds the maximum allowed for this API (10) |
400 |
500 |
Object Entry name length |
Object entry name length limit exceeds the maximum allowed for this API (10) |
400 |
500 |
Array element count |
Array element count limit exceeds the maximum allowed for this API (30) |
400 |
500 |
String value length |
String value length limit exceeds the maximum allowed for this API (30) |
400 |
500 |
Invalid Content-Type |
JSON threat protection validation failed: Invalid Content-Type in Header → (Content type) |
415 |
415 |
Content-Type not found |
JSON threat protection validation failed: Content-Type not found in Header |
415 |
415 |
Share your suggestions with us!
Click here and then [+ Submit idea]