Condividi tramite


Problemi di sicurezza e suggerimenti utili per la traccia

In questo argomento viene descritto come proteggere le informazioni riservate dall'esposizione, nonché suggerimenti utili quando si usa WebHost.

Uso di un listener di traccia personalizzato con WebHost

Se si sta scrivendo un listener di traccia personalizzato, è necessario tenere presente la possibilità che le tracce vadano perse nel caso di un servizio ospitato sul Web. Quando WebHost viene riciclato, arresta il processo live mentre un duplicato assume il controllo. Tuttavia, i due processi devono comunque avere accesso alla stessa risorsa per un certo periodo di tempo, che dipende dal tipo di listener. In questo caso, XmlWriterTraceListener crea un nuovo file di traccia per il secondo processo; mentre la traccia eventi di Windows gestisce più processi all'interno della stessa sessione e concede l'accesso allo stesso file. Se il proprio listener non fornisce funzionalità simili, le tracce possono andare perse quando il file viene bloccato dai due processi.

È inoltre necessario tenere presente che un listener di traccia personalizzato può inviare tracce e messaggi in transito, ad esempio a un database remoto. Come deployer dell'applicazione, è necessario configurare listener personalizzati con il controllo di accesso appropriato. È inoltre consigliabile applicare il controllo di sicurezza a tutte le informazioni personali che possono essere esposte nella posizione remota.

Registrazione di informazioni riservate

Le tracce contengono intestazioni di messaggio quando un messaggio è nello scope. Quando la traccia è abilitata, le informazioni personali nelle intestazioni specifiche dell'applicazione, ad esempio una stringa di query, e le informazioni nel corpo del messaggio, come un numero di carta di credito, possono diventare visibili nei log. Il deployer dell'applicazione è responsabile dell'applicazione del controllo di accesso nei file di configurazione e traccia. Se non si desidera che questo tipo di informazioni sia visibile, è consigliabile disabilitare la traccia o escludere parte dei dati se si desidera condividere i log di traccia.

I suggerimenti seguenti consentono di evitare che il contenuto di un file di traccia venga esposto involontariamente:

  • Assicurarsi che i file di log siano protetti dagli elenchi di controllo di accesso (ACL) sia negli scenari WebHost che self-host.

  • Scegliere un'estensione di file che non può essere facilmente servita usando una richiesta Web. Ad esempio, l'estensione di file .xml non è una scelta sicura. È possibile controllare la guida all'amministrazione di IIS per visualizzare un elenco di estensioni che possono essere gestite.

  • Specificare un percorso assoluto per il percorso del file di log, che deve trovarsi all'esterno della directory pubblica vroot di WebHost per impedire l'accesso da parte di un'entità esterna tramite un Web browser.

Per impostazione predefinita, le chiavi e le informazioni personali identificabili, come nome utente e password, non vengono registrate nelle tracce né nei messaggi di log. Un amministratore del computer, tuttavia, può usare l'attributo enableLoggingKnownPII nell'elemento machineSettings del file Machine.config per consentire alle applicazioni in esecuzione nel computer di registrare informazioni personali note come indicato di seguito:

<configuration>
   <system.ServiceModel>
      <machineSettings enableLoggingKnownPii="Boolean"/>
   </system.ServiceModel>
</configuration>

Un deployer dell'applicazione può quindi usare l'attributo logKnownPii nel file App.config o Web.config per abilitare la registrazione delle informazioni personali come indicato di seguito:

<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>

Solo quando entrambe le impostazioni sono true è abilitata la registrazione delle informazioni personali. La combinazione di due opzioni consente la flessibilità di registrare informazioni personali note per ogni applicazione.

Tenere presente che se si specificano due o più origini personalizzate in un file di configurazione, vengono letti solo gli attributi della prima origine. Gli altri vengono ignorati. Ciò significa che, per il seguente App.configfile , le informazioni personali non vengono registrate per entrambe le origini anche se la registrazione delle informazioni personali è abilitata in modo esplicito per la seconda origine.

<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 l'elemento <machineSettings enableLoggingKnownPii="Boolean"/> esiste all'esterno del file Machine.config, il sistema genera un ConfigurationErrorsException.

Le modifiche sono valide solo all'avvio o al riavvio dell'applicazione. Un evento viene registrato all'avvio quando entrambi gli attributi sono impostati su true. Viene registrato anche un evento se logKnownPii è impostato su true ma enableLoggingKnownPii è false.

Per altre informazioni sulla registrazione delle informazioni personali, vedere esempio di blocco della sicurezza delle informazioni personali.

L'amministratore del computer e lo strumento di distribuzione delle applicazioni devono prestare particolare attenzione quando si usano queste due opzioni. Se la registrazione delle informazioni personali è abilitata, vengono registrate le chiavi di sicurezza e le informazioni personali. Se è disabilitato, i dati sensibili e specifici dell'applicazione vengono comunque registrati nelle intestazioni e nei corpi dei messaggi. Per una discussione più approfondita sulla privacy e sulla protezione delle informazioni personali dall'esposizione, vedere Privacy degli utenti.

Inoltre, l'indirizzo IP del mittente del messaggio viene registrato una volta per ogni connessione per i trasporti orientati alla connessione e una volta per ogni messaggio inviato in caso contrario. Questa operazione viene eseguita senza il consenso del mittente. Tuttavia, questa registrazione si verifica solo a livello di traccia Dettagliato o Informativo, che non sono i livelli di traccia predefiniti o consigliati nell'ambiente di produzione, salvo che per il debug in tempo reale.

Vedere anche