2009-09-23 19 views
10

Come procedere per nascondere le informazioni riservate dai file di registro? Sì, puoi scegliere consapevolmente di non registrare i bit di informazioni sensibili in primo luogo, ma ci possono essere casi generali in cui registra ciecamente i messaggi di errore in caso di errori o di traccia dei messaggi durante l'analisi di un problema ecc. E finisce con l'invio di informazioni sensibili nel tuo log files.Nascondere informazioni riservate/riservate nei file di registro

Ad esempio, si potrebbe tentare di inserire un record di ordine che contiene il numero di carta di credito di un cliente nel database. In caso di errore del database, è possibile che si desideri registrare l'istruzione SQL appena eseguita. Si finirebbe con il numero di carta di credito del cliente in un file di registro.

Esiste un paradigma di progettazione che può essere utilizzato per "taggare" alcune informazioni sensibili come sensibili in modo che una pipeline di registrazione generica possa filtrarle?

+2

Su raccomandazione per spostare questa domanda a serverfault.com: No. Questa domanda è dal punto di vista software. Volete assicurarvi che il vostro software sia abbastanza intelligente da aiutare gli utenti a nascondere le informazioni sensibili. Questo in effetti è un requisito della vita reale che ho visto dai clienti reali. –

+0

* sei -> tuo (dopo 7 anni) –

risposta

7

La mia pratica corrente per il caso in questione è di registrare un hash di tali informazioni sensibili. Questo ci consente di identificare i record di log che appartengono a un reclamo specifico (ad esempio uno specifico numero di carta di credito) ma non dà a nessuno il potere di afferrare semplicemente i log e utilizzare le informazioni sensibili per i loro scopi malvagi.

Naturalmente, fare questo comporta costantemente buone pratiche di codifica. Di solito scelgo di registrare tutti gli oggetti usando i loro overload toString (in Java o .NET) che serializzano l'hash dei valori per i campi contrassegnati con un attributo Sensitive ad essi applicato.

Ovviamente, le stringhe SQL sono più problematiche, ma ci affidiamo maggiormente al nostro ORM per la persistenza dei dati e registra lo stato del sistema in varie fasi, quindi registra le query SQL, quindi diventa un non-problema.

+0

Mi piace l'idea di sovrascrivere toSource; in questo modo, il codice di registrazione non deve preoccuparsi di ciò che viene registrato. Sebbene non risolva il problema con i dump della memoria, accetterò questa come la migliore risposta dal momento che risponde direttamente alla domanda originale. Grazie! –

5

Personalmente considero i file di registro come informazioni riservate e assicuratevi di limitare l'accesso a tali file.

+0

Vero! Sto pensando a casi in cui sei un fornitore di software e chiedi ai tuoi clienti di inviarti i file di registro dal loro sistema per diagnosticare un arresto del sistema, ecc. Sarebbe on the client prima di ripulire i loro file di log da informazione sensibile? Non sarebbe bello se il tuo sistema avesse un modo per permettere ai clienti di ottenerlo gratuitamente? –

+0

"Restrizione dell'accesso" non è abbastanza specifico da fornire una protezione sufficiente per le informazioni della carta di credito. I log devono essere crittografati e l'accesso alle chiavi di decrittografia deve essere specificato nella politica di sicurezza. – erickson

1

Nel tuo esempio, dovresti crittografare il numero della carta di credito o, meglio ancora, nemmeno memorizzarlo in primo luogo.

Se, ad esempio, si registrava qualcos'altro, come un accesso, è possibile che si desideri sostituire esplicitamente una password con *****.

Tuttavia, questo evita accuratamente di rispondere alla domanda che hai posto in primo luogo. In generale, quando si ha a che fare con informazioni sensibili, dovrebbe essere crittografato mentre si trova in una qualsiasi forma di archiviazione permanente, che si tratti di un file di database o di un file di registro. Supponiamo che un cattivo ragazzo sia in grado di mettere le mani su entrambi e proteggere le informazioni di conseguenza.

+0

Penso che la crittografia possa essere la risposta: non appena le informazioni sensibili entrano nel tuo sistema, vengono crittografate e vivono come crittografate. Quindi, se stai facendo un logging di basso livello (semantics-agnostic) o persino ricevendo un dump di memoria, le informazioni saranno ragionevolmente sicure. Penso che mi piaccia l'idea di crittografare le informazioni invece dell'intero file di log come suggerito in altre risposte. –

1

Se si sa che cosa si sta tentando di filtrare, è possibile eseguire l'output del registro tramite un'espressione di pulizia Regex prima di registrarlo.

+0

Sì, ci ho pensato. In realtà, questa potrebbe essere una soluzione praticabile poiché ci sarà sempre un discreto numero di diversi tipi di stringhe "sensibili" che è possibile identificare con espressioni regolari. –

2

La registrazione di un numero di carta di credito potrebbe essere una violazione PCI. E se non sei compatibile con PCI, ti verranno addebitate commissioni più elevate per l'elaborazione delle carte. O non registrare le informazioni sensibili o crittografare l'intero file di registro.

La tua idea di "etichettare" le informazioni sensibili è intrigante. È possibile avere un tipo di dati speciale per le informazioni Sensitive, che ha avvolto il tipo di dati reale sottostante. Ogni volta che questo oggetto viene reso come una stringa di caratteri, restituisce semplicemente "***" o qualsiasi altra cosa.

Tuttavia, questo potrebbe richiedere modifiche di codifica diffuse e richiede un livello di vigilanza cauto simile a quello necessario per evitare la registrazione di informazioni sensibili in primo luogo.

1

Per quanto riguarda le istruzioni SQL in particolare, se la lingua lo supporta, è necessario utilizzare i parametri anziché inserire valori nell'istruzione stessa. In altre parole:

select * from customers where credit_card = ? 

Quindi impostare il parametro sul numero di carta di credito.

Ovviamente, se si pianifica di registrare istruzioni SQL con i parametri compilati, è necessario un altro modo per filtrare i dati riservati.

+0

Vero. Ma questo copre solo le istruzioni SQL. –

+0

Ecco perché l'ho preceduto con "Informazioni specifiche su SQL". Non era destinato ad essere generale al 100%. –

+0

Notato. In realtà stavo cercando più una soluzione proiettile d'argento invece di un'analisi caso per caso, ma grazie per questa risposta! –

0

Fare riferimento a questo strumento, creato esattamente per questo caso d'uso.

Se si desidera mascherare solo il campo selezionato, durante la registrazione e mantenere gli altri valori di campo così come sono. puoi provarlo

https://github.com/senthilaru/sp-util

<dependency> 
    <groupId>com.immibytes</groupId> 
    <artifactId>sp-utils</artifactId> 
    <version>1.0.0-RELEASE</version> 
</dependency> 
Problemi correlati