Безопасное и конфиденциальное логирование - критически важный аспект при разработке приложений, особенно когда речь идет об обработке чувствительной информации. Цель состоит в том, чтобы обеспечить возможность отладки и аудита, не раскрывая при этом пароли, ключи API, номера кредитных карт, персональные данные и другую конфиденциальную информацию.
Вот несколько стратегий, которые можно использовать:
*
. Пример:
import logging
logger = logging.getLogger(__name__)
def log_sensitive_data(credit_card_number):
masked_number = "X" * (len(credit_card_number) - 4) + credit_card_number[-4:]
logger.info(f"Кредитная карта: {masked_number}")
log_sensitive_data("1234567890123456") # В логах будет: Кредитная карта: XXXXXXXXXXXXXX3456
Важно понимать, какие данные считать чувствительными и какие правила маскирования к ним применять. Маскирование должно быть последовательным во всей кодовой базе.
import logging
class SensitiveDataFilter(logging.Filter):
def filter(self, record):
message = record.getMessage()
if "password" in message.lower():
record.msg = "Содержит информацию о пароле (замаскировано)"
record.args = () # Очищаем аргументы, если они есть
return True
logger = logging.getLogger(__name__)
logger.addFilter(SensitiveDataFilter())
logger.warning("Попытка входа с паролем password123") #В логах будет: Содержит информацию о пароле (замаскировано)
import logging
logger = logging.getLogger(__name__)
def authenticate_user(username, password):
if password == "secret":
logger.info("Успешная авторизация")
else:
logger.warning("Неудачная попытка авторизации") # НЕ логируем пароль
logrotate
. Удаляйте старые логи в соответствии с политикой хранения данных.
import logging
import json
logger = logging.getLogger(__name__)
def log_user_activity(username, action, sensitive_data=None):
log_data = {
"username": username,
"action": action,
}
if sensitive_data:
# Пример маскирования (в зависимости от sensitive_data)
log_data["masked_data"] = "DATA_MASKED"
logger.info(json.dumps(log_data))
log_user_activity("testuser", "login", {"password": "mypassword"}) #В логах будет: {"username": "testuser", "action": "login", "masked_data": "DATA_MASKED"}
Важно помнить, что безопасность логирования - это непрерывный процесс, требующий постоянного внимания и улучшения. Регулярно пересматривайте свои стратегии логирования и адаптируйте их к меняющимся требованиям и угрозам.