Toda vez que uma requisição é feita no seu aplicativo, o AppSignal coleta os parâmetros enviados com essa requisição.
Isso inclui dados de formulário (POST), parâmetros de consulta e chaves em rotas (por exemplo, /user/:id/) em alguns frameworks.
Esses dados podem conter informações identificáveis do usuário, como nomes, endereços de e-mail, senhas, códigos de autenticação de dois fatores, tokens de API, etc.
Para proteger os dados sensíveis do seu aplicativo, você deve garantir que esses dados sejam filtrados antes de serem enviados aos servidores do AppSignal. Dessa forma, seu aplicativo não vaza nenhum dado sensível.
Sua aplicação não deve coletar informações de identificação do usuário (como
nomes pessoais, endereços de e-mail, senhas, etc.). Use as ferramentas descritas
neste guia para limitar e filtrar esses dados.
Filtragem de parâmetros
A filtragem básica de parâmetros nas integrações do AppSignal funciona com uma denylist, uma lista de chaves para filtrar e não enviar.
Você pode definir uma opção “filter parameters” na configuração do AppSignal com uma lista de chaves de parâmetro a serem filtradas.
Os valores dos parâmetros que você configurou para serem filtrados serão substituídos pelo valor [FILTERED]. Dessa forma, a lista de parâmetros nos dados do app no AppSignal.com
ainda inclui a chave do parâmetro, mas não o valor, para que você ainda tenha visibilidade de que um valor teve dados potencialmente sensíveis filtrados antes de serem enviados ao AppSignal.
Exemplo
Por exemplo, uma aplicação com esta configuração do AppSignal:
filter_parameters: ["password"]
Resulta nesta visualização para os parâmetros de uma requisição web no AppSignal.com:
{
"password": "[FILTERED]"
}
Este guia mostrará como configurar a denylist de filtragem de parâmetros do seu aplicativo, com base na linguagem que seu aplicativo usa:
Ruby
A gem AppSignal for Ruby tem dois métodos de filtragem de parâmetros:
Filtragem de parâmetros do AppSignal
Use a denylist para filtragem básica de parâmetros. Esta filtragem de parâmetros é aplicada
a quaisquer parâmetros de consulta em uma requisição HTTP e qualquer argumento para jobs em segundo plano.
Esta filtragem suporta filtragem baseada em chaves para hashes, que terão seus valores substituídos por [FILTERED]. Há suporte para hashes aninhados e hashes aninhados em arrays. Qualquer hash encontrado nos seus parâmetros será filtrado.
Para usar esta filtragem, adicione o seguinte ao seu arquivo config/appsignal.yml, no grupo de ambiente em que você deseja aplicar. O valor de filter_parameters é um array de strings.
Appsignal.configure do |config|
config.filter_parameters << "password"
end
Filtragem de parâmetros do Rails
Felizmente, o Rails fornece um mecanismo de filtragem de parâmetros de requisição para limpar dados dos arquivos de log.
O AppSignal aproveita esse mecanismo de parâmetros de requisição para que tanto seus logs de requisição quanto os dados de requisição enviados ao AppSignal sejam filtrados por uma única configuração. Suponha que o aplicativo deva filtrar as mesmas chaves para parâmetros de requisição e argumentos de job reportados para diferentes gems Ruby, como argumentos de job do Sidekiq. Nesse caso, é necessário configurar a filtragem de parâmetros no AppSignal usando a opção filter_parameters para incluir também as chaves definidas na configuração do Rails, pois ele não reutilizará a configuração de filtragem de parâmetros do Rails para essas gems.
Denylist: filtrar chaves específicas
Existem duas maneiras de determinar quais chaves são filtradas. A primeira é adicionar chaves específicas à denylist. No exemplo abaixo, o valor de :secret em qualquer post no app será substituído por [FILTERED].
module Blog
class Application < Rails::Application
config.filter_parameters << :secrets
end
end
A desvantagem dessa abordagem é que é mais complicado lidar com aplicativos maiores e mais complexos, especialmente ao usar recursos como accepts_nested_attributes_for. Se esquecermos de adicionar chaves explicitamente, elas não serão filtradas.
Allowlist: permitir chaves específicas
Usar uma lambda em vez de uma lista de chaves oferece mais flexibilidade. No exemplo a seguir, usamos uma lambda para configurar uma allowlist em vez de uma denylist.
ALLOWED_KEYS_MATCHER = /((^|_)ids?|action|controller|code$)/.freeze
SANITIZED_VALUE = '[FILTERED]'.freeze
Rails.application.config.filter_parameters << lambda do |key, value|
unless key.match(ALLOWED_KEYS_MATCHER)
value.replace(SANITIZED_VALUE) if value.is_a?(String)
end
end
Você pode fazer com que a lambda verifique qualquer chave que desejar, para que possa determinar e usar um método de filtragem que melhor atenda às necessidades do seu aplicativo.
Mais informações sobre filtragem de parâmetros podem ser encontradas nos guias do Rails sobre ActionController.
Elixir
Se o seu app usa Phoenix, você pode usar a filtragem de parâmetros do Phoenix. Você pode usar a filtragem nativa do AppSignal se seu app usar um framework Elixir diferente.
Filtragem de parâmetros do AppSignal
Use a denylist para filtragem básica de parâmetros. Esta filtragem de parâmetros é aplicada
a quaisquer parâmetros de consulta em uma requisição HTTP.
Configure a filtragem de parâmetros usando a opção de configuração filter_parameters. O valor de filter_parameters é uma lista de strings.
config :appsignal, :config,
filter_parameters: ["password", "secret"]
Configuração filter_parameters do Phoenix
Use a filtragem de parâmetros do Phoenix para centralizar sua configuração, que é usada para manter informações sensíveis fora dos logs. O AppSignal seguirá essas regras de filtragem.
config :phoenix,
:filter_parameters, ["password", "secret"]
Se a opção de configuração filter_parameters não estiver definida, o Phoenix usará como padrão ["password"]. Isso significa que um app Phoenix não enviará nenhuma senha ao AppSignal sem nenhuma configuração.
Node.js
Use a denylist filterParameters para filtragem básica de parâmetros. Esta filtragem é aplicada a todos os parâmetros de uma requisição HTTP.
Você pode configurar a filtragem de parâmetros usando a opção de configuração filterParameters. O valor de filterParameters é um array de strings.
const { Appsignal } = require("@appsignal/nodejs");
new Appsignal({
// Outras opções de configuração
filterParameters: ["password", "secret"],
});
Python
Use a denylist filter_parameters para filtragem básica de parâmetros. Esta filtragem é aplicada a todos os parâmetros de uma requisição HTTP.
Você pode configurar a filtragem de parâmetros usando a opção de configuração filter_parameters. O valor de filter_parameters é um array de strings.
from appsignal import Appsignal
appsignal = Appsignal(
# Outras configurações
filter_parameters: ["password", "secret"]
)
Para Go, reportamos os parâmetros de requisição como parâmetros de consulta (?query=text) e dados de payload (payload de requisição POST).
Use a denylist filter_request_query_parameters para filtragem de parâmetros de consulta de requisição. Defina a opção send_request_query_parameters como false para não enviar nenhum parâmetro de consulta de requisição.
Use a denylist filter_request_payload para filtragem de dados de payload de requisição. Defina a opção send_request_payload como false para não enviar nenhum dado de payload de requisição.
Veja a página de configuração do Go para mais informações sobre como configurar o OpenTelemetry para apps Go.
res := resource.NewWithAttributes(
attribute.StringSlice("appsignal.config.filter_request_query_parameters", []string{"password", "cvv"}),
attribute.StringSlice("appsignal.config.filter_request_payload", []string{"password", "cvv"}),
)
Java
Para Java, reportamos os parâmetros de requisição como parâmetros de consulta (?query=text) e dados de payload (payload de requisição POST).
Use a denylist filter_request_query_parameters para filtragem de parâmetros de consulta de requisição. Defina a opção send_request_query_parameters como false para não enviar nenhum parâmetro de consulta de requisição.
Use a denylist filter_request_payload para filtragem de dados de payload de requisição. Defina a opção send_request_payload como false para não enviar nenhum dado de payload de requisição.
Veja a página de configuração do Java para mais informações sobre como configurar o OpenTelemetry para apps Java.
function encode() {
echo -n "$@" | sed 's/,/%2C/g'
}
export OTEL_RESOURCE_ATTRIBUTES="\
appsignal.config.filter_request_query_parameters=$(encode "password,cvv"),\
appsignal.config.filter_request_payload=$(encode "password,cvv"),\
..."
PHP
Para PHP, reportamos os parâmetros de requisição como parâmetros de consulta (?query=text) e dados de payload (payload de requisição POST).
Use a denylist filter_request_query_parameters para filtragem de parâmetros de consulta de requisição. Defina a opção send_request_query_parameters como false para não enviar nenhum parâmetro de consulta de requisição.
Use a denylist filter_request_payload para filtragem de dados de payload de requisição. Defina a opção send_request_payload como false para não enviar nenhum dado de payload de requisição.
Veja a página de configuração do PHP para mais informações sobre como configurar o AppSignal para PHP.
return [
'filter_request_query_parameters' => ['password', 'cvv'],
'filter_request_payload' => ['password', 'cvv'],
// ... outras opções
];