Zum Inhalt

Löschen sensibler Daten

DasLogfireSDK scannt und bearbeitet potenziell sensible Daten aus Protokollen und Spannweiten , bevor es sie exportiert .

Aufräumen untersagt

Um die Bereinigung vollständig zu deaktivieren , setzen Sie [scrubbing ][logfire.configure(scrubbing)] auf False:

import logfire

logfire.configure(scrubbing=False)

Verwenden Sie den benutzerdefinierten Modus für weitere Reinigung

Standardmäßig sucht das SDK nach einigen sensiblen regulären Ausdrücken Um einen eigenen Modus hinzuzufügen, legen Sie ihn fest. extra_patterns Zur Liste der regulären Ausdrücke hinzugefügt:

import logfire

logfire.configure(scrubbing=logfire.ScrubbingOptions(extra_patterns=['my_pattern']))

logfire.info('Hello', data={
    'key_matching_my_pattern': 'This string will be redacted because its key matches',
    'other_key': 'This string will also be redacted because it matches MY_PATTERN case-insensitively',
    'password': 'This will be redacted because custom patterns are combined with the default patterns',
})

Hier ist das anerkannte Reinigungsmodell :

'password', 'passwd', 'mysql_pwd', 'secret', 'auth', 'credential', 'private[._ -]?key', 'api[._ -]?key', 'session', 'cookie', 'csrf', 'xsrf', 'jwt', 'ssn', 'social[._ -]?security', 'credit[._ -]?card'

Verwendung von Rückruf zur Reduzierung der Reinigung

Auf der anderen Seite , wenn die Bereinigung aggressiv ist , können Sie die Funktion an callback übergeben , um zu verhindern , dass bestimmte Daten bearbeitet werden .

Für jede mögliche Übereinstimmung, die der Wäscher findet, wird diese Funktion aufgerufen, wenn sie zurückgegeben wird. None Der Wert wird bearbeitet, andernfalls wird der zurückgegebene Wert den übereinstimmenden Wert ersetzen, den die Funktion akzeptiert. logfire.ScrubMatch。

Hier ist ein Beispiel :

import logfire

def scrubbing_callback(match: logfire.ScrubMatch):
    # 'my_safe_value' 通常包含字符串 'password',但它实际上并不敏感。
    if match.path == ('attributes', 'my_safe_value') and match.pattern_match.group(0) == 'password':
        # 返回原始值,防止脱敏。
        return match.value

logfire.configure(scrubbing=logfire.ScrubbingOptions(callback=scrubbing_callback))

Sicherheit andeuten

Verwenden Sie Nachrichtenmuster .

Die vollständige span/log-Nachricht wird nicht bereinigt , sondern nur die Felder darin , zum Beispiel :

logfire.info(" Benutzerdetails :{user}', user = User (id = 123 , password = ' secret'))

... kann folgende Einträge enthalten :

Benutzerdetails : [ Gelöscht wegen „ Passwort " ]

... aber das :

user = Benutzer (ID = 123 , Passwort = ' geheim')
logfire.info(Benutzerdetails : + str (Benutzer))

aufgezeichnet wird :

Benutzerdetails : User (id = 123 , password = ' secret')

Dies ist notwendig , damit Sicherheitsmeldungen wie „ Password Right " nicht vollständig bearbeitet werden .

Wenn es aktiviert wird. inspect_arguments(Standardwert in Python 3.11 +) und funktioniert einwandfrei, verwenden Sie eine f-Zeichenfolge (z. B. logfire.info(f'User details: {user}'))(Ist sicher.。Für detaillierte Informationen wenden Sie sich bitte hier an。

Kurz gesagt , formatieren Sie Ihre Nachrichten nicht selbst aus Andere Gründe, was im Allgemeinen auch eine gute Praxis ist .

Sensible Daten von der URL ausschließen

Die von der OpenTelemetry Detection Library protokollierten Eigenschaften “http.url” gelten als sicher und bearbeiten daher keine URLs wie 像“http://example.com/users/123/authenticate”.

Als allgemeine Regel gilt, dass nicht nur Logfire, sondern auch die Datensatz-URL (einschließlich der Abfrageparameter) angenommen wird und daher sensible Daten im Anforderungstext oder-header abgelegt werden sollten.

Verwendung parametrischer Datenbankabfragen

Das “db.statement”-Attribut, das von der OpenTelemetry Database Toolbox aufgezeichnet wird, wird als sicher betrachtet und daher SQL-Abfragen wie 像 “SELECT secret_value FROM table WHERE ... nicht bearbeitet.

Verwenden Sie parametrische Abfragen, wie z. B. Prepared-Anweisungen, damit sensible Daten nicht direkt in die Abfragezeichenfolge eingefügt werden, selbst wenn die von Ihnen verwendete Interpolationsmethode von SQL-Injections nicht betroffen ist.


本文总阅读量次