Como ocultar dados confidenciais

O uso do depurador pode expor dados confidenciais dentro do aplicativo, como endereços de e-mail, números de conta etc. É possível configurar listas de bloqueio e exceções à lista de bloqueio para impedir que o agente do depurador acesse esses dados confidenciais.

Os dados ocultos são relatados pelo depurador como "bloqueados pelo administrador", conforme mostrado na seguinte captura de tela:

O depurador informa que o texto oculto está bloqueado pelo administrador

Recomendações

Ao configurar ou atualizar seus arquivos de lista de bloqueio, observe as seguintes recomendações:

  • Use a versão 2.27 ou mais recente do agente Java. Para informações de instalação, consulte Como configurar o Cloud Debugger para Java.

  • Observe que as palavras-chave e a nomenclatura do arquivo de configuração foram atualizadas para blocklist. Atualize seus arquivos conforme necessário.

Configurar seu arquivo

A seguinte configuração pode ser usada como ponto de partida e fornece documentação interna:

# Cloud Debugger Blocklist Configuration File
#
# == Format ==
#
#   This configuration file accepts the following keywords:
#
#    - blocklist
#    - blocklist_exception
#
#   The debugger uses the following rules to determine if a variable's data
#   should be hidden, using the variable's type as the match criteria.
#
#   | Matches `blocklist` | Matches `blocklist_exception` | Data is |
#   |---------------------|-------------------------------|---------|
#   | no                  | no                            | shown   |
#   | no                  | yes                           | shown   |
#   | yes                 | no                            | hidden  |
#   | yes                 | yes                           | shown   |
#
#   Patterns listed under "blocklist" and "blocklist_exception" have the
#   following format:
#
#   [!]<type>
#
#   - `type` is a type prefix (such as a class or package name). Any
#      nested types will also match the pattern. For example, if you
#      specify a package name, the package and all of it's subtypes will
#      match. Note that glob patterns such as `*` can be used anywhere in
#      the type name.
#   -  By prefixing a pattern with an exclamation point, `!`, the pattern
#      is considered an "inverse match" which evaluates to true for any
#      type that does not match the provided pattern.
#   -  The debugger makes no attempt to verify that specified patterns
#      will actually match anything. If you have a misspelling in your
#      pattern, then there will be no reported errors but the pattern will
#      not work as intended.
#
# == Verification ==
#
#   A verification tool is available and can be downloaded with the
#   following command:
#
#   wget https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/debugger_blocklist_checker.py
#
#   This tool can be used to check the configuration file for syntax errors.
#   It can also be used to experiment with configuration files locally
#   without having to deploy a real application.
#
#   A basic usage example:
#
#       debugger_blocklist_checker.py debugger-blocklist.yaml
#
#   You can also use the tool to check if symbols will be blocklisted
#
#     echo com.java.Integer | \
#       debugger_blocklist_checker.py debugger-blocklist.yaml --check

# Uncomment The line below to add blocklists
#blocklist:
#  - "java.security"  # Example package

# Uncomment The line below to add blocklist exceptions
#blocklist_exception:
#  - "java.security.Timestamp"  # Example class

Examples

A configuração de exemplo a seguir oculta dados dentro de uma única classe do depurador:

blocklist:
- "com.sales.Ticket"

Também é possível ocultar pacotes especificando os respectivos nomes:

blocklist:
- "com.sales"

Em alguns casos, pode ser útil criar exceções para as regras blocklist. Isso pode ser feito com um blocklist_exception:

blocklist:
- "com.sales"
blocklist_exception:
- "com.sales.testing"

Finalmente, é possível especificar um padrão inverso, em que as classes que não correspondem a um padrão entram na lista de proibições.

blocklist:
- "!com.sales"

Local do arquivo de configuração

O arquivo de configuração precisa ser nomeado como debugger-blocklist.yaml e pode ser colocado em qualquer lugar no caminho da classe. Um lugar razoável é a raiz do arquivo .jar. As seções a seguir descrevem como fazer isso.

Usar o comando jar

Para inserir ou atualizar um arquivo de configuração em um arquivo .jar, o comando jar pode ser usado. Por isso, para adicionar o arquivo de configuração debugger-blocklist.yaml ao arquivo TicketTracker.jar, use o comando a seguir:

jar uvf TicketTracker.jar debugger-blocklist.yaml

Usar o Ant

Use a tarefa integrada jar do sistema de compilação Ant para inserir o arquivo de configuração em um arquivo JAR. Por exemplo, a objetivo distribute a seguir usa a tarefa jar para adicionar o arquivo de configuração debugger-blocklist.yaml ao arquivo TicketTracker.jar.

<target name="distribute" depends="compile">
  <jar destfile="${distributionDir}/TicketTracker.jar" >
    <fileset dir="${outputDir}"/>
    <fileset dir="${sourceDir}"/>
    <fileset file="debugger-blocklist.yaml" />
  </jar>
</target>

Usar o Maven

Para inserir o arquivo de configuração em um pacote gerenciado pelo sistema de compilação Maven, coloque o arquivo debugger-blocklist.yaml dentro do diretório src/main/resources. Talvez seja necessário criar esse diretório. Crie o projeto e confirme se debugger-blocklist.yaml foi copiado para target/classes.