Фильтрация безопасности
DD имеет встроенную функцию фильтрации конфиденциальных данных, которая автоматически обнаруживает и маскирует пароли, ключи, токены и другую чувствительную информацию в логах.
SensitiveDataFilter
Фильтр конфиденциальных данных на основе regex, поддерживает динамические шаблоны и кэширование.
Создание
| Функция | Сигнатура | Описание |
|---|---|---|
NewSensitiveDataFilter | () *SensitiveDataFilter | Полный набор шаблонов |
NewEmptySensitiveDataFilter | () *SensitiveDataFilter | Пустой фильтр |
NewCustomSensitiveDataFilter | (patterns ...string) (*SensitiveDataFilter, error) | Пользовательские шаблоны |
Методы
| Метод | Сигнатура | Описание |
|---|---|---|
AddPattern | (pattern string) error | Добавить regex-шаблон |
AddPatterns | (patterns ...string) error | Массовое добавление шаблонов |
ClearPatterns | () | Очистить все шаблоны |
PatternCount | () int | Количество шаблонов |
Enable | () | Включить фильтрацию |
Disable | () | Отключить фильтрацию |
IsEnabled | () bool | Включена ли фильтрация |
Filter | (input string) string | Отфильтровать строку |
FilterFieldValue | (key string, value any) any | Отфильтровать значение одного поля |
FilterValueRecursive | (key string, value any) any | Рекурсивная фильтрация вложенных структур |
GetFilterStats | () FilterStats | Получить статистику фильтрации |
ActiveGoroutineCount | () int32 | Количество активных фильтрующих горутин |
WaitForGoroutines | (timeout time.Duration) bool | Ожидание завершения фильтрующих горутин |
Close | () bool | Закрыть фильтр и освободить кэш |
Пользовательские шаблоны
filter, _ := dd.NewCustomSensitiveDataFilter(
`(?i)password\s*[:=]\s*\S+`, // Пароль
`(?i)api[_-]?key\s*[:=]\s*\S+`, // API Key
`\b\d{16,19}\b`, // Номер кредитной карты
)SecurityConfig
Структура конфигурации безопасности, управляющая поведением фильтрации и уровнем безопасности.
type SecurityConfig struct {
MaxMessageSize int // Макс. размер сообщения (байт, 0 = без ограничения, по умолчанию 5МБ в предустановках)
MaxWriters int // Макс. количество Writer (по умолчанию 100 в предустановках)
SensitiveFilter *SensitiveDataFilter // Фильтр конфиденциальных данных
RateLimitConfig *internal.RateLimitConfig // Конфигурация ограничения частоты (внутренний тип, nil отключает ограничение; пресеты это поле не заполняют)
}О RateLimitConfig
RateLimitConfig управляет ограничением частоты логирования для предотвращения флуда логов (DoS) и поддержания стабильности системы под нагрузкой. Это поле — внутренний тип (*internal.RateLimitConfig), его нельзя создать напрямую. Все предустановленные конфигурации (DefaultSecurityConfig, DefaultSecureConfig, SecurityConfigForLevel и др.) не заполняют это поле, то есть по умолчанию ограничение частоты не включается; Logger инициализирует ограничитель только при явной установке. Чтобы отключить ограничение частоты, установите его в nil.
FilterStats
Структура статистики фильтрации для мониторинга и наблюдаемости.
type FilterStats struct {
ActiveGoroutines int32 // Текущее количество активных фильтрующих горутин
PatternCount int32 // Количество зарегистрированных шаблонов конфиденциальных данных
SemaphoreCapacity int // Макс. количество параллельных операций фильтрации
MaxInputLength int // Порог усечения длины входных данных
Enabled bool // Включена ли фильтрация
TotalFiltered int64 // Общее количество операций фильтрации
TotalRedactions int64 // Общее количество маскирований
TotalTimeouts int64 // Общее количество таймаутов
AverageLatency time.Duration // Средняя задержка фильтрации
CacheHits int64 // Количество попаданий в кэш
CacheMiss int64 // Количество промахов кэша
}SecurityLevel
Перечисление уровней безопасности, используется с SecurityConfigForLevel для быстрого получения предустановленной конфигурации.
type SecurityLevel intРеализует метод String(), возвращающий читаемое имя уровня.
| Константа | Описание |
|---|---|
SecurityLevelDevelopment | Среда разработки (без фильтрации конфиденциальных данных, без ограничения частоты) |
SecurityLevelBasic | Базовая фильтрация (пароли, токены, API-ключи, номера кредитных карт, SSN, телефоны, SWIFT/CVV и др., около 40 категорий часто встречающихся конфиденциальных данных) |
SecurityLevelStandard | Стандартная фильтрация (рекомендуется для производственных сред) |
SecurityLevelStrict | Строгая фильтрация (среды с PII/финансовыми данными) |
SecurityLevelParanoid | Экстремальная фильтрация (высокорисковые среды) |
Предустановленные конфигурации
| Функция | Описание | Сценарий |
|---|---|---|
DefaultSecurityConfig() | Базовая фильтрация конфиденциальных данных | Производственная среда (рекомендуется) |
DefaultSecureConfig() | Полная фильтрация конфиденциальных данных | Высокие требования к безопасности |
HealthcareConfig() | Соответствие HIPAA | Медицина |
FinancialConfig() | Соответствие PCI-DSS | Финансы |
GovernmentConfig() | Правительственный стандарт | Государственный сектор |
Конфигурация по уровню
func SecurityConfigForLevel(level SecurityLevel) *SecurityConfig| Уровень | Константа | Описание |
|---|---|---|
| Development | SecurityLevelDevelopment | Среда разработки, наиболее мягкий |
| Basic | SecurityLevelBasic | Базовая фильтрация |
| Standard | SecurityLevelStandard | Стандартная фильтрация |
| Strict | SecurityLevelStrict | Строгая фильтрация |
| Paranoid | SecurityLevelParanoid | Экстремальная фильтрация |
Clone
func (c *SecurityConfig) Clone() *SecurityConfigСоздаёт глубокую копию конфигурации безопасности.
Способы использования
Через Config
// DefaultConfig уже включает DefaultSecurityConfig(), обычно явно задавать не нужно
cfg := dd.DefaultConfig()
logger, _ := dd.New(cfg)
// Если нужно заменить на конфигурацию более высокого уровня безопасности, переопределите явно
// cfg.Security = dd.DefaultSecureConfig()Изменение во время выполнения
// Обновление конфигурации безопасности
logger.SetSecurityConfig(dd.DefaultSecureConfig())
// Чтение текущей конфигурации
sec := logger.GetSecurityConfig()Фильтрация вложенных структур
filter := dd.NewSensitiveDataFilter()
// Фильтрация строки
filtered := filter.Filter("password=s3cr3t")
// → "password=[REDACTED]"
// Вложенные структуры (автоматическая рекурсия, поддерживает обнаружение циклических ссылок)
data := map[string]any{
"user": map[string]any{
"name": "admin",
"password": "s3cr3t",
"token": "eyJhbGciOi...",
},
}
filteredData := filter.FilterValueRecursive("data", data)Мониторинг статистики фильтрации
filter := dd.NewSensitiveDataFilter()
// ... использование фильтрации ...
stats := filter.GetFilterStats()
fmt.Printf("Всего фильтраций: %d, маскирований: %d, средняя задержка: %v\n",
stats.TotalFiltered, stats.TotalRedactions, stats.AverageLatency)Следующие шаги
- Конфигурация -- конфигурация SecurityConfig
- Logger -- метод SetSecurityConfig
- Аудитные логи -- аудит событий безопасности