Preocupações de segurança e dicas úteis para rastrear
Este tópico descreve como você pode proteger informações confidenciais de serem expostas, bem como dicas úteis ao usar o WebHost.
Usando um ouvinte de rastreamento personalizado com WebHost
Se você estiver escrevendo seu próprio ouvinte de rastreamento, você deve estar ciente da possibilidade de que os rastreamentos podem ser perdidos no caso de um serviço hospedado na Web. Quando o WebHost recicla, ele desliga o processo ao vivo enquanto uma duplicata assume o controle. No entanto, os dois processos ainda devem ter acesso ao mesmo recurso por algum tempo, o que depende do tipo de ouvinte. Nesse caso, o , XmlWriterTraceListener
cria um novo arquivo de rastreamento para o segundo processo, enquanto o rastreamento de eventos do Windows gerencia vários processos dentro da mesma sessão e dá acesso ao mesmo arquivo. Se o seu próprio ouvinte não fornecer funcionalidades semelhantes, os vestígios podem ser perdidos quando o arquivo é bloqueado pelos dois processos.
Você também deve estar ciente de que um ouvinte de rastreamento personalizado pode enviar rastreamentos e mensagens no fio, por exemplo, para um banco de dados remoto. Como um implantador de aplicativos, você deve configurar ouvintes personalizados com controle de acesso apropriado. Você também deve aplicar controle de segurança sobre qualquer informação pessoal que possa ser exposta no local remoto.
Registro de informações confidenciais
Os rastreamentos contêm cabeçalhos de mensagem quando uma mensagem está no escopo. Quando o rastreamento está habilitado, informações pessoais em cabeçalhos específicos do aplicativo, como uma cadeia de caracteres de consulta; e informações do corpo, como um número de cartão de crédito, podem ficar visíveis nos registros. O implantador de aplicativos é responsável por impor o controle de acesso nos arquivos de configuração e rastreamento. Se não quiser que esse tipo de informação fique visível, desative o rastreamento ou filtre parte dos dados se quiser compartilhar os logs de rastreamento.
As dicas a seguir podem ajudá-lo a evitar que o conteúdo de um arquivo de rastreamento seja exposto involuntariamente:
Certifique-se de que os arquivos de log estão protegidos por listas de controle de acesso (ACL) em cenários WebHost e auto-host.
Escolha uma extensão de arquivo que não possa ser facilmente atendida usando uma solicitação da Web. Por exemplo, a extensão de arquivo .xml não é uma escolha segura. Você pode verificar o guia de administração do IIS para ver uma lista de extensões que podem ser atendidas.
Especifique um caminho absoluto para o local do arquivo de log, que deve estar fora do diretório público vroot WebHost para impedir que ele seja acessado por uma parte externa usando um navegador da Web.
Por padrão, chaves e informações de identificação pessoal (PII), como nome de usuário e senha, não são registradas em rastreamentos e mensagens registradas. Um administrador de máquina, no entanto, pode usar o enableLoggingKnownPII
machineSettings
atributo no elemento do arquivo Machine.config para permitir que aplicativos em execução na máquina registrem informações de identificação pessoal conhecidas (PII) da seguinte maneira:
<configuration>
<system.ServiceModel>
<machineSettings enableLoggingKnownPii="Boolean"/>
</system.ServiceModel>
</configuration>
Um implantador de aplicativo pode usar o atributo no arquivo App.config ou Web.config para habilitar o logKnownPii
log de PII da seguinte maneira:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Somente quando ambas as configurações estiverem true
é que o registro de PII está habilitado. A combinação de dois switches permite a flexibilidade de registrar PII conhecidas para cada aplicativo.
Você deve estar ciente de que, se especificar duas ou mais fontes personalizadas em um arquivo de configuração, somente os atributos da primeira fonte serão lidos. Os outros são ignorados. Isso significa que, para o seguinte arquivo App.config, a PII não é registrada para ambas as fontes, embora o log de PII esteja explicitamente habilitado para a segunda fonte.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
</system.diagnostics>
Se o <machineSettings enableLoggingKnownPii="Boolean"/>
elemento existir fora do arquivo Machine.config, o sistema lançará um ConfigurationErrorsExceptionarquivo .
As alterações só entram em vigor quando o aplicativo é iniciado ou reiniciado. Um evento é registrado na inicialização quando ambos os atributos são definidos como true
. Um evento também é registrado se logKnownPii
estiver definido como true
mas enableLoggingKnownPii
for false
.
Para obter mais informações sobre registro de PII, consulte Exemplo de bloqueio de segurança de PII.
O administrador da máquina e o implantador de aplicativos devem ter extrema cautela ao usar esses dois switches. Se o registro de PII estiver habilitado, as chaves de segurança e as PII serão registradas. Se estiver desativado, os dados confidenciais e específicos do aplicativo ainda serão registrados nos cabeçalhos e corpos das mensagens. Para uma discussão mais aprofundada sobre privacidade e proteção de PII de serem expostas, consulte Privacidade do usuário.
Além disso, o endereço IP do remetente da mensagem é registrado uma vez por conexão para transportes orientados à conexão e uma vez por mensagem enviada de outra forma. Isto é feito sem o consentimento do remetente. No entanto, esse registro ocorre apenas nos níveis de rastreamento de informações ou detalhados, que não são os níveis de rastreamento padrão ou recomendados na produção, exceto para depuração ao vivo.