Skip to main content

Библиотека для маскировки чувствительных данных (пароли, токены, и т.д.) в строках, словарях и списках

Project description

maskinfly

maskinfly — это легковесная библиотека для рекурсивной маскировки чувствительных данных (паролей, токенов, email, номеров карт, SSN, IP-адресов и т.д.) в Python-структурах. Она автоматически обнаруживает и заменяет конфиденциальную информацию в строках, словарях и списках, а также поддерживает аудит всех произведённых замен.

Возможности

  • Рекурсивная маскировка — работает с вложенными словарями, списками и другими коллекциями.
  • Встроенные паттерны — пароли, JWT, email, номера кредитных карт (регулярное выражение ошибочно, но оставлено для совместимости), SSN, IP-адреса, токены.
  • Маскировка по имени переменной — если в коде переменная называется password, api_key и т.п., её значение будет замаскировано даже без явного паттерна.
  • Аудит — логирование причины замены (pattern, varname, type) и пути к значению.
  • Поддержка pydantic.SecretStr — если установлен Pydantic, объекты SecretStr маскируются автоматически.
  • Простой интерфейс — функция mask() для быстрой маскировки или класс Masker для тонкой настройки.

Установка

pip install maskify

git clone https://github.com/MordantAcid/maskifly.git

Для поддержки pydantic.SecretStr установите дополнительную зависимость:

pip install .[pydantic]

Быстрый старт

from maskify import mask

# Маскировка в словаре
data = {
    "user": "john",
    "password": "secret123",
    "email": "john@example.com"
}
masked = mask(data)
print(masked)
# {'user': 'john', 'password': '***', 'email': 'john@example.com'}

# Маскировка в строке
text = "My token is abc123xyz"
print(mask(text))
# 'My token is ***'

# Включение аудита (лог будет выведен в stderr)
mask(data, audit_enabled=True)
# Вывод в лог: 2025-01-01 12:00:00 - MASKIFY_AUDIT - Значение маски 'password' | reason=pattern | type=str

Использование
Функция mask()
Самый простой способ  импортировать mask и передать данные:

result = mask(data, audit_enabled=False, audit_logger=None)

- data  любые данные (str, dict, list и т.д.).
- audit_enabled  если True, включает логирование аудита.
- audit_logger  собственный экземпляр AuditLogger (опционально).

Класс Masker
Для более гибкого управления создайте экземпляр Masker:

from maskify import Masker

masker = Masker(audit_enabled=True)
masked_data = masker.mask(data)

Параметры конструктора:

- audit_enabled: bool = False
- audit_logger: Optional[AuditLogger] = None

Метод mask(data, path="") принимает произвольные данные и опциональный строковый путь (используется для аудита).

Аудит: AuditLogger
По умолчанию аудит пишет в logging.getLogger("maskify.audit") с уровнем INFO и форматированием '%(asctime)s - MASKIFY_AUDIT - %(message)s'. Вы можете передать свой логгер:

import logging
from maskify import AuditLogger

custom_logger = logging.getLogger("my_audit")
audit = AuditLogger(logger=custom_logger)
masker = Masker(audit_enabled=True, audit_logger=audit)
masker.mask({"secret": "value"})

Маскировка по имени переменной
Если значение не подошло ни под один паттерн, библиотека пытается определить имя переменной, в которой оно хранится (с помощью inspect). Если имя входит в набор SENSITIVE_VAR_NAMES, значение заменяется на ***.

Чувствительные имена по умолчанию:

password, passwd, pwd, secret, token, api_key, apikey,
credit_card, creditcard, card_number, ssn, social_security,
pin, auth, bearer, private_key

Пример:

secret_token = "abc123xyz"
mask(secret_token)  # -> "***" (переменная называется secret_token)

Работа с pydantic.SecretStr
Если установлен Pydantic, объекты SecretStr маскируются вне зависимости от содержимого:

from pydantic import SecretStr
from maskify import mask

secret = SecretStr("real_password")
masked = mask(secret)  # -> "***"

Требования
Python  3.7

Для опциональной поддержки SecretStr: pydantic >= 2.0.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

maskinfly-0.1.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maskinfly-0.1.1-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file maskinfly-0.1.1.tar.gz.

File metadata

  • Download URL: maskinfly-0.1.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for maskinfly-0.1.1.tar.gz
Algorithm Hash digest
SHA256 11ca6852d0aab47abd6757987fdaf6255c0d4b15009fa182017d40ceb44b8708
MD5 15457710610c16d1b6d4e842b2a21e13
BLAKE2b-256 2ef049fe19454a698807cc8dd0c86dcf67af82ce434b74f66e36252cc0843bfb

See more details on using hashes here.

File details

Details for the file maskinfly-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: maskinfly-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for maskinfly-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d0c2e57fa01629dd53ffe408c98231f4d093423c9dde2ffccbea4c99dd53671c
MD5 ca56c73bee33d324f7419a58f2656a49
BLAKE2b-256 56880c12d1851f1d4da04d4a27c479e3df91e0422182bb4e9a5fabb71d9e70bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page