Pular para o conteúdo

Log seguro e auditoria

O log que não pode ser forjado, que não guarda dado pessoal, e a trilha de auditoria que denuncia a linha apagada.

O log tem dois inimigos opostos: o que falta (o incidente sem rastro) e o que sobra (o CPF, a senha, o token gravados em texto). E um terceiro, mais sutil: o log forjado, em que um campo com quebra de linha acrescenta um evento que nunca aconteceu.

dataforge
adopt Arcane.Seguranca as S
adopt Arcane.OS as OS
adopt Arcane.IO as IO

// 1. Forjar: um nome de usuario com '\n' acrescentaria uma linha inteira.
nome := "ana\n2026-09-22 INFO login ok usuario=admin"
linha := $"login falhou usuario={S.escapar_log(nome)}"
assert len(linha.lines()) is 1

// 2. Sobrar: o dado pessoal sai mascarado.
evento := "pedido de ana@exemplo.com, cpf 529.982.247-25"
out S.mascarar_pii(evento)
assert "529.982.247-25" not in S.mascarar_pii(evento)

// 3. Apagar: a auditoria e encadeada  cada registro leva o resumo do anterior.
pasta := $"{OS.temp_dir()}/df-aud-{randint(100000, 999999)}"
IO.mkdir(pasta)
a := S.auditoria($"{pasta}/trilha.log")
a.registrar("login", {"usuario": "ana"}, "ana")
a.registrar("exportou", {"linhas": 120}, "ana")
assert a.conferir()["ok"]
IO.remove_tree(pasta)
out "log de uma linha, sem PII, e a trilha integra"
RegistreNão registre
quem, o quê, quando, de onde, o resultadosenha, token, número de cartão, CPF inteiro
a falha de autenticação e de autorizaçãoo corpo inteiro do pedido
a mudança de permissão e de configuraçãoo dado de saúde, o dado de criança
o id da requisição, para cruzar serviçosa chave de sessão

Continue em Detecção e Incidentes.