Schoon gevoelige gegevens op¶
DeLogfireSDK scant en bewerkt potentieel gevoelige gegevens uit logboeken en overspanningen voordat ze worden geëxporteerd.
Opruimen uitschakelen¶
Stel [scrubbing ][logfire.configure(scrubbing)] in op False om het opruimen volledig uit te schakelen:
import logfire
logfire.configure(scrubbing=False)
Gebruik aangepaste patronen voor meer schoonmaak¶
Standaard zoekt de SDK naar enkele gevoelige reguliere expressies. Om uw eigen schema toe te voegen, stelt u extra_patterns in om toe te voegen aan de lijst met reguliere expressiereeksen:
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',
})
Het volgende is de standaard reinigingsmodus:
'password', 'passwd', 'mysql_pwd', 'secret', 'auth', 'credential', 'private[._ -]?key', 'api[._ -]?key', 'session', 'cookie', 'csrf', 'xsrf', 'jwt', 'ssn', 'social[._ -]?security', 'credit[._ -]?card'
Gebruik callbacks om opruimen te verminderen¶
Aan de andere kant, als de opruiming agressief is, kunt u een functie doorgeven aan callback om te voorkomen dat bepaalde gegevens worden bewerkt.
Voor elke potentiële overeenkomst die door de scrubber wordt gevonden, wordt de functie aangeroepen. Als None wordt geretourneerd, wordt de waarde bewerkt. Anders vervangt de geretourneerde waarde de overeenkomende waarde. De functie accepteert logfire.ScrubMatch .
Hier is een voorbeeld:
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))
Veiligheidstips¶
Berichtensjablonen gebruiken¶
Het volledige span / log bericht wordt niet opgeschoond, alleen de velden erin. Bijvoorbeeld het volgende:
logfire.info ('Gegevens gebruiker:{user}', gebruiker = Gebruiker (id = 123, wachtwoord = 'geheim'))
Het volgende kan worden vastgelegd:
Gegevens gebruiker: [Opgeschoond i.v.m. "wachtwoord"]
... Maar dit:
Gebruiker = Gebruiker (id = 123, wachtwoord = 'geheim')
logfire.info ('gebruikersgegevens:' + str (user))
Zal opnemen:
Gebruikersgegevens: Gebruiker (id = 123, wachtwoord = 'geheim')
Dit is nodig zodat beveiligingsberichten zoals "wachtwoord correct" niet volledig worden bewerkt.
Als inspect_arguments(de standaard in Python 3.11 +) is ingeschakeld en goed werkt, is het gebruik van een f-string (bijv.logfire.info(f'User details: {user}')) ) een veilige.Voor meer informatie, zie hier.
Kortom, formatteer het bericht niet zelf. Om andere redenen is dit meestal ook een goede gewoonte.
¶
Gevoelige gegevens uitsluiten van URL 's
De eigenschap “http.url” die is opgenomen door de OpenTelemetry-detectiebibliotheek wordt als veilig beschouwd, dus URL 's zoals 像“http://example.com/users/123/authenticate” worden niet bewerkt.
Als algemene regel, niet alleen voor Logfire, maar ga er ook van uit dat de URL (inclusief queryparameters) wordt gelogd, dus gevoelige gegevens moeten in de aanvraagtekst of header worden geplaatst.
¶
Geparametreerde databasequery 's gebruiken
Het “db.statement”-kenmerk dat is vastgelegd door de OpenTelemetry-databasetoolbibliotheek wordt als veilig beschouwd en daarom worden SQL-query 's zoals "像 “SELECT secret_value FROM table WHERE ..." niet bewerkt.
Gebruik geparametriseerde query 's, zoals voorbereide instructies, zodat gevoelige gegevens niet rechtstreeks in de queryreeks worden ingevoegd, zelfs niet als u interpolatiemethoden gebruikt die niet worden beïnvloed door SQL-injectie.
本文总阅读量次