Log Obfuscation
Este interceptor é usado para ocultar dados selecionados (presentes no header ou body de uma requisição ou resposta) no log do Trace.
|
Para criar logs no Trace (acessados por meio do ícone |
Configurando o interceptor
Para configurar o interceptor de Log Obfuscation, é necessário informar a localização (Location — body ou header) da informação a ser ofuscada. Se a informação que você deseja omitir estiver localizada no corpo (body) da requisição, defina uma expressão regular para que a informação seja identificada (Custom regex). Se estiver no header, informe o atributo (Attribute), usando letras minúsculas. Por fim, defina os símbolos nos quais a informação será transformada (no campo Replace to).
| O campo Replace to também aceita backreferences, o que permite preservar trechos do valor original no log — como os primeiros e os últimos dígitos de um documento. Veja Preservando parte do valor original. |
| É possível ofuscar múltiplas informações com um único interceptor de Log Obfuscation usando uma expressão regular adequada (como explicado aqui). Válido para informações que estiverem no body da requisição. |
Exemplos de ofuscamento de uma única informação
Imagine que o corpo de uma requisição contenha as informações a seguir:
{
"name": "Jonathan Crane",
"alias": "Scarecrow",
"baseOfOperations": [
"Gotham City",
"Arkham Asylum"
],
"status": {
"alignment": "bad",
"citizenship": "american",
"maritalStatus": "single",
"occupation": [
"anarchist",
"serial killer",
"former psychiatrist",
"university professor"
],
"active": true
},
"characteristics": {
"gender": "male",
"height": 1.83,
"weight": 64,
"eyes": "blue",
"hair": "brown"
}
}
Para ofuscar um campo é necessário criar uma expressão regular adequada.
Se quisermos ofuscar o campo "name", por exemplo, podemos incluir as configurações:
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{
"name": **********,
"alias": "Scarecrow",
"baseOfOperations": [
"Gotham City",
"Arkham Asylum"
],
"status": {
"alignment": "bad",
"citizenship": "american",
"maritalStatus": "single",
"occupation": [
"anarchist",
"serial killer",
"former psychiatrist",
"university professor"
],
"active": true
},
"characteristics": {
"gender": "male",
"height": 1.83,
"weight": 64,
"eyes": "blue",
"hair": "brown"
}
}
Para ofuscar o campo "occupation", podemos incluir as configurações:
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{
"name": "Jonathan Crane",
"alias": "Scarecrow",
"baseOfOperations": [
"Gotham City",
"Arkham Asylum"
],
"status": {
"alignment": "bad",
"citizenship": "american",
"maritalStatus": "single",
"occupation": ##########,
"active": true
},
"characteristics": {
"gender": "male",
"height": 1.83,
"weight": 64,
"eyes": "blue",
"hair": "brown"
}
}
Por fim, para ofuscar o campo "characteristics", uma forma é incluir as configurações:
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{
"name": "Jonathan Crane",
"alias": "Scarecrow",
"baseOfOperations": [
"Gotham City",
"Arkham Asylum"
],
"status": {
"alignment": "bad",
"citizenship": "american",
"maritalStatus": "single",
"occupation": [
"anarchist",
"serial killer",
"former psychiatrist",
"university professor"
],
"active": true
},
"characteristics": {****}
}
Se combinarmos os três interceptores, sequencialmente, o Trace mostrará o seguinte log para essa requisição:
{
"name": **********,
"alias": "Scarecrow",
"baseOfOperations": [
"Gotham City",
"Arkham Asylum"
],
"status": {
"alignment": "bad",
"citizenship": "american",
"maritalStatus": "single",
"occupation": ##########,
"active": true
},
"characteristics": {****}
}
Porém, uma forma melhor de ofuscar múltiplos campos é utilizando uma única expressão regular mais abrangente (veja nos exemplos abaixo).
Exemplo de ofuscamento de informação do header
Para ofuscar uma informação contida no header da requisição, selecione a localização e informe o atributo.
| O atributo deve ser escrito usando letras minúsculas. |
Atributos informados em letras maiúsculas ou começando por letra maiúscula não serão ocultados e assim, aparecerão no Trace.
Exemplo de configuração para ocultar o atributo authorization:
Como resultado, o Trace mostrará o seguinte log para essa requisição:
host: api-testing.sensedia.com authorization: ********** user-agent: PostmanRuntime/7.28.4 accept: */* postman-token: 1234a-bcd5-67abc-defg789xyz accept-encoding: gzip, deflate, br x-forwarded-for: 123.45.678.900 x-forwarded-proto: https x-envoy-external-address: 123.45.678.900 x-request-id: abcdefg-456f-789g-00gh-hijk10 content-length: 0
Configure um interceptor de Log Obsfuscation para cada atributo que você deseja ocultar. Para atributos do header, não há como configurar múltiplas informações no mesmo interceptor.
Veja a seguir como ofuscar múltiplas informações do body da requisição.
Expressão regular para múltiplas informações
Quando o conjunto de dados fizer parte de um JSON, a expressão regular para múltiplas informações segue a estrutura:
(?<=(<chaves>):)\s*(<regex_tipos>)
| O "\s*" da expressão regular serve para ignorar quaisquer espaços brancos entre chave e valor. |
Tanto as chaves (informações) quanto as regex para cada tipo de valor devem ser separados por "|".
As regex para os correspondentes tipos de valor são:
-
números, booleanos e null:
[\+\-\w.]+ -
strings:
"[^"]*" -
arrays simples:
\[[^\]]*\] -
objetos simples:
\{[^\}]*\}
Exemplos de ofuscamento de múltiplas informações
Agora, imagine que o corpo de uma requisição contenha as informações a seguir:
{
"name": "Pamela Lillian Isley",
"alias": "Poison Ivy",
"baseOfOperations": "Gotham City",
"status": {
"alignment": "neutral",
"citizenship": "american",
"maritalStatus": "single",
"occupation": [
"scientist",
"eco-terrorist"
],
"active": true
},
"characteristics": {
"gender": "female",
"height": 1.68,
"weight": 50,
"eyes": "green",
"hair": "red"
}
}
Para ofuscar simultaneamente os campos "name", "occupation" e "characteristics", por exemplo, podemos incluir as configurações:
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{
"name":*****,
"alias": "Poison Ivy",
"baseOfOperations": "Gotham City",
"status": {
"alignment": "neutral",
"citizenship": "american",
"maritalStatus": "single",
"occupation":*****,
"active": true
},
"characteristics":*****
}
Por outro lado, para ofuscar simultaneamente os campos "name", "citizenship", "maritalStatus", "active", "height" e "weight", por exemplo, basta trocar a regex anterior por:
(?<=("name"|"citizenship"|"maritalStatus"|"active"|"height"|"weight"):)\s*("[^"]*"|[\+\-\w.]+)
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{
"name":*****,
"alias": "Poison Ivy",
"baseOfOperations": "Gotham City",
"status": {
"alignment": "neutral",
"citizenship":*****,
"maritalStatus":*****,
"occupation": [
"scientist",
"eco-terrorist"
],
"active":*****
},
"characteristics": {
"gender": "female",
"height":*****,
"weight":*****,
"eyes": "green",
"hair": "red"
}
}
| Diferente do caso em que foram utilizados múltiplos interceptores, os símbolos usados para ofuscar as informações são obrigatoriamente os mesmos. |
Preservando parte do valor original (backreferences)
Além de texto literal, o campo Replace to aceita backreferences: referências aos grupos de captura definidos na expressão regular do campo Custom regex. Com isso é possível aplicar uma ofuscação parcial, mantendo no log apenas os trechos do valor original que você quiser preservar.
Sintaxe suportada
| Token | Significado |
|---|---|
|
Conteúdo do grupo de captura numerado correspondente. |
|
Conteúdo do grupo de captura nomeado |
|
Cifrão literal ( |
|
Barra invertida literal ( |
Como $ e \ passaram a ter significado especial no campo Replace to, um cifrão literal precisa ser escapado como \$.
Um $ solto — não seguido de número ou de {nome} — é rejeitado na validação.
|
Exemplos de ofuscamento parcial
Para manter os 3 primeiros e os 2 últimos dígitos de um campo do body, podemos incluir as configurações:
-
Custom regex:
("documento"\s*:\s*")([^"]{3})[^"]*?([^"]{2})(?=") -
Replace to:
$1$2*******$3
Se o corpo da requisição contiver:
{"documento":"12345678900","nome":"fulano"}
Como resultado, o Trace mostrará o seguinte log para essa requisição:
{"documento":"123*******00","nome":"fulano"}
Para manter os 2 primeiros caracteres de um atributo do header, podemos incluir as configurações:
-
Attribute:
token -
Custom regex:
([0-9]{2})[0-9]* -
Replace to:
$1**
Nesse caso, o valor original 123456 aparecerá no Trace como 12**.
A mesma referência pode ser feita pelo nome do grupo de captura, em vez do número:
-
Custom regex:
(?<inicio>[0-9]{2})[0-9]* -
Replace to:
${inicio}**
O resultado é idêntico ao do exemplo anterior.
| A quantidade de símbolos definida no Replace to é fixa e não acompanha o tamanho do valor original. Dessa forma, o log não revela quantos caracteres foram ocultados. |
Validações da configuração
A combinação Custom regex + Replace to é validada ao salvar a revisão — inclusive contra todos os ambientes com deploy ativo — e também no deploy. Configurações inválidas são rejeitadas com o status HTTP 400.
As mensagens são retornadas em inglês pelo Manager.
Nelas, %s é substituído pelo nome do interceptor e, quando aplicável, pelo nome do grupo ou pela referência inválida.
| Caso | Mensagem |
|---|---|
Expressão regular inválida em Custom regex |
|
Referência a grupo numerado inexistente (por exemplo, |
|
Referência a grupo nomeado inexistente |
|
|
|
| Quando a Custom regex usa uma variável de ambiente, o valor não é conhecido no momento de salvar. Nesse caso, apenas a sintaxe do Replace to é validada ao salvar; as validações que dependem da expressão regular ocorrem no deploy, com a variável já resolvida. |
Vídeo
Quer entender melhor como ofuscar dados do Trace usando o Log Obfuscation? Dê uma olhada no vídeo abaixo, gravado por nosso Sensedier Marco Milleo.
Share your suggestions with us!
Click here and then [+ Submit idea]