Библиотека для маскировки чувствительных данных (пароли, токены, и т.д.) в строках, словарях и списках
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11ca6852d0aab47abd6757987fdaf6255c0d4b15009fa182017d40ceb44b8708
|
|
| MD5 |
15457710610c16d1b6d4e842b2a21e13
|
|
| BLAKE2b-256 |
2ef049fe19454a698807cc8dd0c86dcf67af82ce434b74f66e36252cc0843bfb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0c2e57fa01629dd53ffe408c98231f4d093423c9dde2ffccbea4c99dd53671c
|
|
| MD5 |
ca56c73bee33d324f7419a58f2656a49
|
|
| BLAKE2b-256 |
56880c12d1851f1d4da04d4a27c479e3df91e0422182bb4e9a5fabb71d9e70bc
|