विषय पर बढ़ें

संवेदनशील डेटा को साफ करें

लॉगफायर एसडीके उन्हें निर्यात करने से पहले लॉग और स्पैन से संभावित संवेदनशील डेटा को स्कैन और संपादित करता है।

सफाई अक्षम करें

सफाई को पूरी तरह से अक्षम करने के लिए, कृपया [scrubbing][logfire.configure(scrubbing)] पर सेट करें False यह क्या है?

import logfire

logfire.configure(scrubbing=False)

अधिक सफाई के लिए कस्टम पैटर्न का उपयोग करें

डिफ़ॉल्ट रूप से, K कुछ संवेदनशील नियमित भावों की तलाश करता है। अपना स्कीमा जोड़ने के लिए, सेट करें extra_patterns नियमित अभिव्यक्ति स्ट्रिंग्स की सूची में जोड़ेंः

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',
})

निम्नलिखित डिफ़ॉल्ट सफाई मोड है:

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

सफाई को कम करने के लिए कॉलबैक का उपयोग करें

दूसरी ओर, यदि सफाई आक्रामक है, तो आप फ़ंक्शन को पास कर सकते हैं callback कुछ डेटा को संपादित करने से रोकने के लिए।

इस फ़ंक्शन को स्क्रबर द्वारा पाए गए प्रत्येक संभावित मैच के लिए कहा जाता है। यदि यह लौटता है None, मान संपादित किया जाएगा। अन्यथा, लौटाया गया मान मिलान मान को बदल देगा। फ़ंक्शन स्वीकार करता है logfire.ScrubMatch...

यहाँ एक उदाहरण है:

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

सुरक्षा युक्तियाँ

संदेश टेम्पलेट्स का उपयोग करना

पूर्ण स्पैन / लॉग संदेश को साफ नहीं किया जाता है, केवल इसके भीतर के क्षेत्र। उदाहरण के लिए, निम्नलिखित:

logfire.info ('उपयोगकर्ता विवरण:{user}', उपयोगकर्ता = उपयोगकर्ता (id = 123, पासवर्ड = 'secret'))

निम्नलिखित दर्ज किया जा सकता है:

उपयोगकर्ता विवरण: ["पासवर्ड" के कारण साफ किया गया]

... लेकिन यह:

उपयोगकर्ता = उपयोगकर्ता (id = 123, पासवर्ड = 'secret')
logfire.info ('उपयोगकर्ता विवरण:' + str (user))

रिकॉर्ड करेगा:

उपयोगकर्ता विवरण: उपयोगकर्ता (id = 123, पासवर्ड = 'secret')

यह आवश्यक है ताकि "पासवर्ड सही" जैसे सुरक्षा संदेश पूरी तरह से संपादित न हों।

यदि सक्षम है inspect_arguments(पायथन 3.11 + में चूक) और ठीक काम करता है, एफ स्ट्रिंग का उपयोग करें (उदाहरण के लिए logfire.info(f'User details: {user}'))) सुरक्षित है...अधिक जानकारी के लिए, कृपया यहां देखें...

संक्षेप में, संदेश को स्वयं प्रारूपित न करें। से बाहर अन्य कारण यह आमतौर पर एक अच्छा अभ्यास भी है।

URL से संवेदनशील डेटा को छोड़ें

लाइब्रेरी रिकॉर्ड के गुणों का पता लगाता है“http.url” इसे सुरक्षित माना जाता है और इसलिए इसे संपादित नहीं किया जाएगा像“http://example.com/users/123/authenticate” ऐसा URL।

एक सामान्य नियम के रूप में, न केवल लॉगफायर के लिए, बल्कि यह भी मान लें कि (क्वेरी मापदंडों सहित) लॉग किया जाएगा, इसलिए संवेदनशील डेटा को अनुरोध निकाय या हेडर में रखा जाना चाहिए।

पैरामीटराइज्ड डेटाबेस प्रश्नों का उपयोग करना

डेटाबेस उपकरण लाइब्रेरी रिकॉर्ड “db.statement” गुणों को सुरक्षित माना जाता है और संपादित नहीं किया जाएगा像 “SELECT secret_value FROM table WHERE ..."ऐसे SQL प्रश्न।"

तैयार किए गए विवरणों जैसे पैरामीटराइज्ड प्रश्नों का उपयोग करें, ताकि संवेदनशील डेटा को सीधे क्वेरी स्ट्रिंग में न डाला जाए, भले ही आप प्रक्षेप विधियों का उपयोग करें जो SQL इंजेक्शन से प्रभावित नहीं हैं।


本文总阅读量次