2009-09-23 8 views
10

Wie würden Sie vorgehen, wenn vertrauliche Informationen nicht in Protokolldateien gespeichert werden? Ja, Sie können sich bewusst dafür entscheiden, sensible Informationsbits nicht zu protokollieren, aber es kann Fälle geben, in denen Sie Fehlermeldungen bei Fehlern oder Trace-Meldungen blindlings bei der Untersuchung eines Problems usw. protokollieren und in Ihrem System landen Protokolldateien.Vertrauliche Informationen in Protokolldateien ausblenden

Sie könnten beispielsweise versuchen, einen Bestelldatensatz einzufügen, der die Kreditkartennummer eines Kunden in der Datenbank enthält. Bei einem Datenbankfehler möchten Sie möglicherweise die gerade ausgeführte SQL-Anweisung protokollieren. Sie würden dann die Kreditkartennummer des Kunden in einer Protokolldatei landen.

Gibt es ein Designparadigma, das verwendet werden kann, um bestimmte Informationsbits als empfindlich zu kennzeichnen, so dass eine generische Protokollierungspipeline sie herausfiltern kann?

+2

Auf Empfehlung, diese Frage zu serverfault.com bewegen: Nein. Diese Frage aus Sicht der Software ist. Sie möchten sicherstellen, dass Ihre Software so intelligent ist, dass Benutzer sensible Informationen ausblenden können. Dies ist tatsächlich eine reale Anforderung, die ich von realen Kunden gesehen habe. –

+0

* du bist -> dein (nach 7 Jahren) –

Antwort

7

Meine derzeitige Praxis für den Fall in Frage ist, einen Hash dieser sensiblen Informationen zu protokollieren. Dies ermöglicht uns, Protokolldatensätze zu identifizieren, die zu einem bestimmten Anspruch gehören (z. B. eine bestimmte Kreditkartennummer), aber niemandem die Befugnis gibt, die Protokolle einfach zu erfassen und die vertraulichen Informationen für ihre bösartigen Zwecke zu verwenden.

Natürlich beinhaltet dies konsequent gute Kodierungspraktiken. Normalerweise wähle ich alle Objekte mit ihren toString Überladungen (in Java oder .NET) aus, die den Hash der Werte für Felder, die mit einem Attribut Sensitive markiert sind, serialisiert.

Natürlich sind SQL-Strings problematischer, aber wir verlassen uns mehr auf unseren ORM für die Datenpersistenz und protokollieren den Status des Systems in verschiedenen Phasen und protokollieren dann SQL-Abfragen, so dass es kein Problem mehr darstellt.

+0

Ich mag die Idee, toSource zu überschreiben; Auf diese Weise muss sich der Protokollierungscode nicht darum kümmern, was protokolliert wird. Obwohl das Problem nicht mit Speicherabbildern gelöst wird, akzeptiere ich dies als die beste Antwort, da es direkt die ursprüngliche Frage beantwortet. Vielen Dank! –

5

Ich persönlich würde die Protokolldateien selbst als vertrauliche Informationen ansehen und sicherstellen, dass der Zugriff darauf eingeschränkt wird.

+0

True! Ich denke an Fälle, in denen Sie ein Softwarehersteller sind und Ihre Kunden bitten, Ihnen die Protokolldateien von ihrem System zu senden, um einen Systemabsturz zu diagnostizieren usw. Es wäre die Aufgabe des Clients, zuerst seine Protokolldateien zu bereinigen heikle Informationen? Wäre es nicht schön, wenn Ihr System eine Möglichkeit hätte, Kunden das kostenlos zu bekommen? –

+0

"Zugriffsbeschränkung" ist nicht spezifisch genug, um Kreditkarteninformationen ausreichend zu schützen. Die Protokolle müssen verschlüsselt werden und der Zugriff auf die Entschlüsselungsschlüssel muss in der Sicherheitsrichtlinie erläutert werden. – erickson

1

In Ihrem Beispiel sollten Sie die Kreditkartennummer verschlüsseln oder, noch besser, sie nicht einmal speichern.

Wenn Sie, sagen wir mal, etwas anderes loggen, wie eine Anmeldung, möchten Sie vielleicht ein Passwort explizit durch ***** ersetzen.

Dies jedoch vermeidet es, die Frage, die Sie gestellt haben, zu vermeiden. Im Allgemeinen sollte es im Umgang mit sensiblen Informationen auf dem Weg zu einer beliebigen Form von permanentem Speicher, sei es eine Datenbankdatei oder eine Protokolldatei, verschlüsselt werden. Nehmen wir an, dass ein Bad Guy in der Lage sein wird, entweder in die Finger zu bekommen und die Informationen entsprechend zu schützen.

+0

Ich denke, Verschlüsselung kann die Antwort sein: Sobald sensible Informationen in Ihr System gelangen, wird es verschlüsselt und lebt als verschlüsselt. Wenn Sie also Low-Level-Logging (semantisch-agnostisch) durchführen oder sogar einen Speicherauszug bekommen, sind die Informationen einigermaßen sicher. Ich denke, ich mag die Idee, die Informationen anstelle der gesamten Log-Datei zu verschlüsseln, wie es in anderen Antworten vorgeschlagen wird. –

1

Wenn Sie wissen, was Sie filtern möchten, können Sie Ihre Protokollausgabe über einen Regex-Bereinigungsausdruck ausführen, bevor Sie sie protokollieren.

+0

Ja, ich dachte daran. In der Tat kann dies eine praktikable Lösung sein, da es immer eine diskrete Anzahl von verschiedenen Arten von "empfindlichen" Strings geben wird, die Sie mit Regexen identifizieren können. –

2

Das Protokollieren einer Kreditkartennummer könnte eine PCI-Verletzung darstellen. Und wenn Sie nicht PCI-konform sind, werden Ihnen höhere Kartenbearbeitungsgebühren in Rechnung gestellt. Protokollieren Sie keine vertraulichen Informationen oder verschlüsseln Sie Ihre gesamten Protokolldateien.

Ihre Idee, vertrauliche Informationen zu "markieren", ist faszinierend. Sie könnten einen speziellen Datentyp für Sensitive Informationen haben, der den echten zugrunde liegenden Datentyp umgab. Immer wenn dieses Objekt als Zeichenkette gerendert wird, gibt es nur "***" oder was auch immer zurück.

Dies könnte jedoch umfangreiche Codierungsänderungen erfordern und erfordert ein hohes Maß an bewusster Wachsamkeit, ähnlich dem, das erforderlich ist, um sensible Informationen von vornherein zu vermeiden.

1

In Bezug auf SQL-Anweisungen sollten Sie, wenn Ihre Sprache dies unterstützt, Parameter verwenden, anstatt Werte in die Anweisung selbst zu schreiben. Mit anderen Worten:

select * from customers where credit_card = ? 

Dann den Parameter auf die Kreditkartennummer einstellen.

Wenn Sie SQL-Anweisungen mit ausgefüllten Parametern protokollieren möchten, benötigen Sie natürlich eine andere Möglichkeit, vertrauliche Daten herauszufiltern.

+0

Wahr. Dies deckt jedoch nur SQL-Anweisungen ab. –

+0

Deshalb habe ich es mit "In Bezug auf SQL-Anweisungen speziell" vorangestellt. Es war nicht beabsichtigt, 100% allgemein zu sein. –

+0

Bekannt. Ich war eigentlich eher auf der Suche nach einer Silberkugellösung als nach einer Einzelfallanalyse, aber danke für diese Antwort! –

0

Verweisen Sie dieses Werkzeug, das genau für diesen Anwendungsfall erstellt wurde.

Wenn Sie nur ausgewählte Felder während der Protokollierung maskieren und andere Feldwerte beibehalten möchten. Du kannst es versuchen.

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

<dependency> 
    <groupId>com.immibytes</groupId> 
    <artifactId>sp-utils</artifactId> 
    <version>1.0.0-RELEASE</version> 
</dependency> 
Verwandte Themen