콘텐츠로 이동

중요한 데이터 정리

LogfireSDK는 내보내기 전에 로그 및 범위에서 잠재적으로 중요한 데이터를 스캔하고 편집합니다.

정리 비활성화

정리를 완전히 비활성화하려면 [scrubbing][logfire.configure(scrubbing)] 로 설정 False 그것은 무엇입니까?

import logfire

logfire.configure(scrubbing=False)

더 많은 정리를 위해 사용자 지정 패턴 사용

기본적으로 SDK는 일부 민감한 정규식을 찾습니다. 자신의 스키마를 추가하려면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, 암호 = '비밀')

다음 사항을 기록할 수 있습니다.

사용자 세부 정보: ["비밀번호"로 인해 청소됨]

... 그러나 이것은:

사용자 = 사용자(id = 123, 암호 = '비밀')
logfire.info('사용자 세부 정보:' + str(사용자)))

기록 예정:

사용자 세부 정보: 사용자(id=123, 암호='비밀')

"암호 수정"과 같은 보안 메시지가 완전히 편집되지 않도록 해야 합니다.

inspect_arguments(Python 3.11+의 기본값)가 활성화되고 제대로 작동하는 경우 f 문자열(예:logfire.info(f'User details: {user}')) )을 사용하는 것이 안전한.자세한 내용은 여기를 참조하십시오.

요컨대, 메시지를 직접 포맷하지 마십시오.다른 이유로, 이것은 일반적으로 좋은 관행입니다.

URL에서 중요한 데이터 제외

OpenTelemetry 탐지 라이브러리에서 기록한 속성 “http.url” 는 안전한 것으로 간주되므로 像“http://example.com/users/123/authenticate” 와 같은 URL은 편집되지 않습니다.

일반적으로 Logfire뿐만 아니라 URL(쿼리 매개 변수 포함)이 기록된다고 가정하므로 중요한 데이터가 요청 본문 또는 헤더에 배치되어야 합니다.

매개 변수화된 데이터베이스 쿼리 사용

OpenTelemetry 데이터베이스 도구 라이브러리 레코드 “db.statement” 속성은 안전한 것으로 간주되며 편집되지 않습니다.像 “SELECT secret_value FROM table WHERE ..."그런 SQL 쿼리."

준비된 문과 같은 매개 변수화된 쿼리를 사용하여 중요한 데이터가 쿼리 문자열에 직접 삽입되지 않도록 합니다. 이는 SQL 주입의 영향을 받지 않는 보간 방법을 사용하는 경우에도 마찬가지입니다.


本文总阅读量次